jQuery keyup и "enter" в Safari

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

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

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

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

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

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

изменить: Я также попытался просто показать предупреждение вместо функции doSearch (). Предупреждение отображается нормально, но после этого форма отправляется.

5 ответов


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

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

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


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

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

        if (key === 13) {
            doSearch();
        }
        return false;
    });

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

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

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

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

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

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

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

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