Почему не срабатывает событие jquery, когда я использую стрелки вверх или вниз для выбора?
Я слушаю событие изменения выпадающего списка select с помощью jquery и плагина livequery.
$(".myDropdown").livequery("change", function () {
});
одна вещь, которую я заметил (я использую firefox), заключается в том, что
Обработчик событий не срабатывает при попадании стрелок вверх и вниз, когда у меня есть сфокусированный выбор (стрелки вверх и вниз меняют записи)
Почему событие изменения не срабатывает, когда я перемещаю стрелки вверх и вниз и есть ли рекомендация или обходной путь для этого?
Ответы
Ответ 1
Если то, что говорит Мальволио, верно, тогда это должно работать
$(".myDropdown").livequery("change", function () {
// your event handler
}).livequery("keypress", function() {
$(this).trigger("change");
});
http://jsfiddle.net/tW6Su/2/ как доказательство
Ответ 2
Полагаю, я подведу итог.
Если вы щелкните элемент в поле выбора, вы его меняете. Если вы переходите вниз через поле выбора, введя его, он не будет выбран, пока вы не нажмете кнопку "Enter", не отпустите или не отпустите. Я предполагаю, что это немного отличается от браузера к браузеру, но, по сути, выбор происходит на чем-то вроде события "Я полностью закончил это поле формы и ушел сейчас".
Если вы хотите, чтобы результат был более быстрым, вы могли либо вызвать событие изменения следующим образом:
$("select").live("keypress",function(){
$(this).trigger("change");
});
Если вы хотите, чтобы это произошло во всех полях формы, попробуйте этот селектор: $(":input select textarea")
Ответ 3
Этот следующий код (на Firefox 3.6 в любом случае) согласуется с OP и не согласуется с комментаторами:
$('body').append('<select/>').find('select')
.append('<option>one</option)')
.append('<option>two</option>')
$('body').find('select').keypress(function() {
console.log('keypress: ' + $(this).val()); })
Всякий раз, когда вы нажимаете клавишу со стрелкой, в журнал записывается измененное значение.
Ответ 4
Изменения событий не активируются, пока элемент не теряет фокус, даже если вы меняете значение (как доказал Мальволио). Следующий фрагмент кода будет вручную запускать событие изменения при нажатии любой клавиши:
$("select").on("keypress",function(){
$(this).trigger("change");
});