2009-11-26 1 views
0

У меня есть функция (filterLeads), которую я хочу вызвать как при удалении поля формы (размытие), так и при нажатии клавиши ввода в поле формы.Задача события jQuery keypress

$('#filter input, #filter select').blur(filterLeads); 
$('#filter input, #filter select').keypress(function(e){if(e.which == 13) {filterLeads();}}); 

Размытие работает правильно, но у меня возникла проблема с событием нажатия клавиши. Событие, похоже, не срабатывает, если что-то не доходит до вызова filterLeads(); например:

$('#filter input, #filter select').keypress(function(e){if(e.which == 13) {alert(e.which);filterLeads();}}); 

Это правильно вызывает filterLeads() после подтверждения предупреждения (которое показывает правильный код ключа).

Любые идеи? (Browser FF 3.0)

+2

Параметр 'alert' окна выскакивают причины' blur' огонь, который мог бы объяснить, почему это делает эту работу. – bobince

+1

Проверяет ли filterLead событие как параметр? – Boldewyn

+0

Пожалуйста, покажите нам функцию 'filterLeads()'. –

ответ

1

Просто попробуйте: вы должны return false; из анонимной функции, потому что иначе форма (если она есть), содержащая поля, будет отправлена ​​и страница будет перезагружена.

Если filterLeads ожидает событие как параметр, не забудьте написать: filterLeads(e).

И если ничего не помогает: Огонь blur(): (прилагается JQuery-, потому что специалисты-там может быть пользовательских JQuery событий)

$('#filter input, #filter select').keypress(function(e){$(e.target).blur();}); 

.

+0

Это не работает. Страница не перезагружается при нажатии кнопки ввода, поэтому я не думаю, что действие формы запускается (кнопка отправки отсутствует). – Tom

+0

Попробуйте применить действие к событию keyup. Любые изменения? – Boldewyn

0

просто добавить e.preventDefault(); внутри обработчика событий, например:

$('#filter input, #filter select').keypress(function(e){if(e.which == 13) {filterLeads(); e.preventDefault(); }}); 
+0

Это в основном то же самое, что и возвращение false, если нет других обработчиков событий. – Boldewyn

+0

Да, к сожалению, это тоже не работает. – Tom

+0

Я имел в виду preventDefault(), а не stopPropagation(), извините ... – krcko

2

Я не уверен, почему вы только против FF ... но вы должны также включать в себя all non-FF browsers с помощью e.keyCode. Также keypress не может быть лучшим событием для использования в соответствии с this information.

Попробуйте что-то вроде этого:

$("#filter input, #filter select").keyup(function(e){ 
var key = (e.which) ? e.which : e.keyCode; 
if(key == 13){ filterLeads(e) } 
}); 
+0

Код фактически используется во внутреннем веб-приложении для компании, в которой я работаю, и мы может гарантировать, что Firefox будет использоваться для доступа к нему. Сказав, что я очень хочу писать кросс-код браузера, и эта информация очень полезна - спасибо :) – Tom

+0

спасибо и решил мою проблему :) –