почему событие изменения jquery не запускается, когда я использую стрелки вверх или вниз для выбора? - PullRequest
14 голосов
/ 17 сентября 2011

Я слушаю событие изменения выпадающего списка, используя jquery и плагин livequery.

$(".myDropdown").livequery("change", function () {
});

Одна вещь, которую я заметил (я использую firefox), это то, что

Событиеобработчик не срабатывает от нажатия стрелок вверх и вниз, когда у меня есть фокус выбора (стрелки вверх и вниз меняют позиции)

Почему событие изменения не срабатывает, когда я перемещаю клавишу со стрелкой вверхи вниз и есть ли рекомендация или обходной путь для этого?

Ответы [ 4 ]

5 голосов
/ 29 апреля 2012

Если то, что говорит Мальволио, верно, то это должно работать

$(".myDropdown").livequery("change", function () {
   // your event handler
}).livequery("keypress", function() { 
   $(this).trigger("change");
});

http://jsfiddle.net/tW6Su/2/ как доказательство

2 голосов
/ 05 мая 2012

Полагаю, я подведу итоги.

Если вы щелкнете по элементу в поле выбора, вы измените его. Если вы переместитесь вниз через поле выбора, набрав его, оно не будет выделено, пока вы не нажмете ввод, не нажмите или не уберете вкладку. Я предполагаю, что это немного отличается от браузера к браузеру, но, по сути, выбор происходит на что-то вроде события «Я полностью закончил с этим полем формы и удален сейчас».

Если вы хотите, чтобы результат был более немедленным, вы можете вызвать событие изменения следующим образом:

$("select").live("keypress",function(){
    $(this).trigger("change");
});

Если вы хотите, чтобы это происходило во всех полях формы, попробуйте этот селектор: $(":input select textarea")

1 голос
/ 17 сентября 2011

Этот следующий код (в любом случае на 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()); })

Всякий раз, когда вы нажимаете клавишу со стрелкой, измененное значение печатается в журнале.

0 голосов
/ 05 мая 2012

События изменения не запускаются до тех пор, пока элемент не потеряет фокус, даже если вы изменяете значение (как доказал Мальволио). Следующий фрагмент кода будет запускать событие изменения вручную при нажатии любой клавиши:

$("select").on("keypress",function(){
    $(this).trigger("change");
});
...