Почему не срабатывает событие 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");
});