Как я могу надежно обнаружить все события, которые вызывают изменение значения HTML select
, в то время как этот элемент все еще имеет фокус?
Для обычного ввода мышью, либо click
, либо change
событие работает нормально.Однако при вводе с клавиатуры (и при вводе с помощью мыши с помощью колеса прокрутки) событие change
не срабатывает, пока фокус не будет потерян.Я могу обойти это, используя событие keyup
для смены клавиатуры (и игнорируя проблему с колесом мыши), но обнаруживаю, что мой код изобилует такими вещами:
$(".my-select").keyup(handleSelect).change(handleSelect);
function handleSelect() {
var $this = $(this);
// don't process keyup events that don't result in change
if ($this.data('old-val') == $this.val()) { return; }
$this.data('old-val', $this.val());
// ... other stuff ...
}
Есть ли более простой шаблон/ рецепт, который решает эту проблему (jQuery или прямой JavaScript)?