jQuery keyup и «войти» в Safari - PullRequest
       7

jQuery keyup и «войти» в Safari

8 голосов
/ 03 октября 2010

Я использую jQuery и хочу, чтобы пользователь мог нажать ввод после ввода данных в поле поиска, чтобы начать поиск.

Я использую следующий код:

        $('#textSearch').keyup(function (event) {
            if (event.keyCode == '13') {
                doSearch();
            }
            return false;
        });

Он отлично работает в Firefox и IE, но не работает в Safari.Что происходит, так это то, что форма отправляется, когда я нажимаю ввод в сафари, а это не то, что я хочу.

Добавление onsubmit = "return false;"к форме работает, но это не вариант, так как тег формы находится на главной странице страницы asp.net, и мне нужно отправить форму на другие страницы.

Есть ли способ также получить эту функциюработа в Safari?

РЕДАКТИРОВАТЬ: я также пытался просто показать предупреждение вместо функции doSearch ().Предупреждение отображается нормально, но после этого форма отправляется.

Ответы [ 5 ]

4 голосов
/ 03 октября 2010

Браузеры могут различаться в зависимости от того, какое событие вызывает отправку. В этом случае Safari может отправлять сообщения о событии keydown.
Вы можете наблюдать за событием отправки без изменения разметки и отменить его:

$('#the-id-of-the-form').submit( function( e ) {
    e.preventDefault();
});

Затем вы можете прослушать событие keyup и обработать его, как сейчас.

3 голосов
/ 03 октября 2010

Попробуйте это:

    $('#textSearch').keyup(function (event) {
        var key = event.keyCode || event.which;

        if (key === 13) {
            doSearch();
        }
        return false;
    });
1 голос
/ 03 октября 2010

добавить предотвратить део

$('#textSearch').keyup(function (event) {
    if (event.keyCode == '13') {
        event.preventDefault();
        doSearch();
    }
    return false;
});
0 голосов
/ 11 октября 2010

Я использую «keydown», потому что «keyup» у меня не работает. Мне также нужно, чтобы этот ввод был отключен с полями ввода, которые я добавляю с помощью AJAX, таким образом, «живой».

Вам нужно привязать обработчик «изменения» к полю. Эта версия выходит из поля («размытие»), затем вызывает изменение в поле, а затем запускает изменение. Без размытия изменение срабатывает дважды!

    $('#textSearch').live('keydown', function(event) {
  if(event.keyCode == 13)
  {
  $(event.target).blur();
  $(event.target).change();
  event.preventDefault();
  return false;
  }
 });
0 голосов
/ 11 октября 2010

Я использую «keydown», потому что «keyup» у меня не работает.Мне также нужно, чтобы этот ввод был отключен с полями ввода, которые я добавляю с помощью AJAX, то есть «живой».

Вам нужно привязать обработчик «изменения» к полю.Эта версия выходит из поля («размытие»), затем вызывает изменение в поле, а затем запускает изменение.Без размытия изменение срабатывает дважды!

 $('#textSearch').live('keydown', function(event) {
  if(event.keyCode == 13)
  {
  $(event.target).blur();
  $(event.target).change();
  event.preventDefault();
  return false;
  }
 }
);
...