Есть ли способ узнать, что вызвало событие onChange в поле выбора в Internet Explorer (> = IE8) - клавиатура или мышь?
У меня есть код, который делает что-то, когда пользователь выбирает значение, и этот код прекрасно работает в Firefox и Chrome, но не в IE (не удивительно, да). В IE он работает нормально, только если пользователь использует мышь, а не клавиатуру, потому что тогда он запускает событие onchange при каждом нажатии клавиши (не на Enter, как в обычных браузерах).
Итак, чтобы исправить это поведение, мне нужно знать, происходит ли событие с помощью клавиатуры, и затем я отфильтрую его.
Обновление:
Хорошо, немного поиграв, я нашел хорошее решение. Размещение здесь, если кто-то найдет это полезным. Приведенное ниже решение с использованием jQuery, но может быть сделано и в чистом Javascript.
Это код, вызвавший проблему:
$("#mySelectBox").change(function () {
// Do something
});
И это мое решение. Это, вероятно, не идеально, но это работает в моем случае. И обработчики событий могут быть связаны в jQuery, конечно. Приведенный ниже код хранит начальное значение выбора и использует его, чтобы избежать каких-либо действий при первом щелчке мыши - когда пользователь раскрывает поле выбора. Также он фильтрует все нажатия клавиш, кроме Enter.
function doSomething(el) {
if (el.data["valueOnFocused"] !== el.val()) {
// Do something
}
}
$("#mySelectBox").focusin(function () {
$(this).data["valueOnFocused"] = $(this).val();
});
$("#mySelectBox").keyup(function (e) {
if (e.which === 13)
{
doSomething($(this));
}
});
$("#mySelectBox").click(function () {
doSomething($(this));
});