Как обнаружить все события изменения / клика HTML select, которые все еще имеют фокус? - PullRequest
3 голосов
/ 19 октября 2010

Как я могу надежно обнаружить все события, которые вызывают изменение значения 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)?

Ответы [ 2 ]

1 голос
/ 19 октября 2010

«изменение» не срабатывает до тех пор, пока элемент не потеряет фокус.То, что вы делаете, может быть единственным способом решить эту проблему.Вы также можете посмотреть на selectedIndex, а также значение.

0 голосов
/ 19 октября 2010

Как сказал Диодей, событие change вызывается, когда элемент теряет фокус.Но вы можете проверить, является ли нажатая клавиша клавишей ввода, а затем вызвать вашу функцию.И я думаю, что вряд ли кто-нибудь использует колесо мыши, чтобы изменить значение поля выбора ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...