Код ниже очень прост. У меня есть jQuery автозаполнение , привязанный к вводу текста html, на который ссылается #search
. Когда пользователь что-то вводит в него, в выпадающем списке отображаются предложения от сервера. Если пользователь нажимает на одно из предложений или нажимает клавишу Enter, когда оно выбрано, появляется всплывающее окно (facebox), показывающее вызываемую страницу внутри всплывающего окна. Если вместо этого пользователь просто хочет выполнить обычный поиск и не выбрать предложение, он может сделать это, нажав Enter или нажав #searchButton
. Другими словами:
- Пользователь вводит что-то, например,
грейпфрут
- Появляются выбираемые предложения.
- Сценарий 1: пользователь выбирает
предложение с помощью мыши или клавиатуры,
нажимает ввод или щелкает по нему - вызывая это
элемент для всплывающего окна, то есть автозаполнение
результат. Handler срабатывает (а не
.keypress)
- Сценарий 2: пользователь не заинтересован
в предложениях, а вместо прессов
введите ИЛИ нажмите
#searchButton
, чтобы выполнить полный поиск того, что он набрал в #search
. Обработчик результатов автозаполнения не запускается, вместо этого либо нажатие клавиши Enter инициирует событие нажатия #searchButton
, либо оно запускается напрямую (т.е. фактически щелкается), вызывая тем самым обычный поиск.
Это прекрасно работает в IE6, IE7, IE8, Chrome, Safari, но НЕ в Firefox.
В firefox, когда нажата клавиша «Enter» для предложения, и обработчик результатов, и события нажатия клавиш запускаются, давая пользователю всплывающее окно с лицевой панелью, а также выполняют полный поиск. Я подумал, что каким-то образом остановка .keypress
от стрельбы, если. result
пожары, добьется цели, однако я не смог понять, как это сделать. Я пытался поместить с помощью jQuery stopPropogation()
и stopImmediatePropogation()
в обработчик .result в надежде, что это предотвратит запуск .keypress, но это ничего не изменило.
Если у кого-то возникнут какие-либо мысли или я хотел бы помочь мне в этом, я был бы очень признателен.
Заранее спасибо!
jQuery("#search").autocomplete("/index/suggest", {
selectFirst: false,
formatItem: function(data, i, n, value) {
return "<font color='#3399CC'>" + value.split("::")[0] + "</font>";
},
formatResult: function(data,value) {
return value.split("::")[0];
}
}).result(function(event, data, formatted) {
alert('Hello, someone selected a suggestion by clicking on it or pressing enter on it, so you\'re getting this!');
var pieces = formatted.split("::");
var url = '/' + pieces[1] + '/detail/?id=' + pieces[2];
jQuery.facebox({ ajax: url });
}).keypress(keypressHandler).blur(function() {
alert('I don\'t want this to appear if .result above is called, and it doesnt, except in firefox! Bah!');
jQuery(this).flushCache();
});
function keypressHandler(e)
{
if(e.which == 13) {
if(!jQuery('#searchButton').is(':disabled')) {
jQuery(this).blur();
jQuery('#searchButton').focus().click();
}
}
}