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;
}
});