Как найти, что вызвало событие onChange для поля выбора в IE - клавиатура или мышь? - PullRequest
0 голосов
/ 07 февраля 2012

Есть ли способ узнать, что вызвало событие 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));
});

1 Ответ

1 голос
/ 07 февраля 2012

По сути, событие onchange предполагается , которое должно быть запущено, когда пользователь делает выбор, затем покидает ввод (будь то выбор, текстовое поле, переключатель или что-то еще).Так как в IE это не работает, вы можете попробовать использовать onblur, чтобы определить, когда пользователь действительно покидает поле.В этот момент вы можете прочитать, какой элемент выбран и действовать соответственно.Это скорее обходной путь, но он может делать то, что вам нужно.

Редактировать: другой вариант - обнаруживать нажатие клавиши Enter, например:

if(e && e.which){ // NN4 specific code
e = e
characterCode = e.which
}
else {
e = event
characterCode = e.keyCode // IE specific code
}

Переменная CharacterCodeтеперь есть «код» какой кнопки была нажата.Если это была клавиша ввода, этот код будет 13. Вы можете прослушать это.

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