Я только что выступил против этого досады и нашел этот вопрос в поиске ответов, так что вот подробности моего расследования и решения (ну, обходной путь).
keyup
и keydown
события просто не будет срабатывать на input
или textarea
элементов в Blackberry браузере при нажатии клавиши Backspace. Это будет, однако, срабатывает, когда обработчик событий связан с document
:
$("#myInput").keydown(someFn); //Will not fire for backspace
$(document).keyup(someFn); //Will fire for backspace
Почему это так, я не имею ни малейшего понятия. Событие keyup
должно пузыриться, и это происходит, но поскольку он даже не срабатывает, когда вы нажимаете клавишу backspace, это не так много.
Однако есть еще одно событие в нашем распоряжении. Событие input
поддерживается браузером Blackberry и корректно срабатывает в любое время, когда изменяется значение элемента (в том числе, к счастью для нас, когда это изменение происходит из-за нажатия клавиши backspace).
Таким образом, мы можем решить проблему путем привязки обработчиков событий к keydown
и input
. Событие keydown
будет срабатывать до input
, за исключением случаев, когда нажата клавиша обратного хода, и в этом случае keydown
не будет срабатывать.Таким образом, мы можем отслеживать, что довольно легко:
function handler(e) {
if (e.keyCode === 8) {
alert("Backspace!"); //Backspace was pressed :)
}
}
var elem = document.getElementById("example");
elem.addEventListener("keydown", function (e) { //Bind to keydown event
this.keydownFired = true; //Remember that keydown fired in expando property
handler.call(this, e); //Call the event handler
}, false)
elem.addEventListener("input", function (e) { //Bind to input event
if (!this.keydownFired) { //Keydown didn't fire, must have pressed backspace
e.keyCode = 8; //Fix the event object
handler.call(this, e); //Call the event handler
}
delete this.keydownFired; //Clean up so we can handle next key press
}, false);
Некоторые примечания:
Насколько я могу сказать, что это только вопрос в браузере на Blackberry 6. Я проверил Blackberry 5 (физическое устройство и симулятор) и 7 (симулятор), и оба будут запускать события keydown
и keyup
для ключевого слова backspace.
Это «исправление» работает практически в каждом браузере, в котором я тестировал его (чтобы вы могли использовать его для правильной поддержки Blackberry 6 без нарушения работы других браузеров), кроме Opera Mobile (протестировано в версии 12), которое по какой-то причине Иногда бывает так, что он дважды запускал событие input
.
Это позволяет обнаруживать обратные пресеты, когда есть текст во входном файле для удаления (в противном случае событие input
не срабатывает). Это, вероятно, самое большое падение сценария.
Рабочий стол here, но для тестирования мобильных устройств он быстрее загружает embedded version.
Этот ответ может быть, что вы хотите: http://stackoverflow.com/questions/942037/how-do-i-detect-the-delete-key-in-my-field-subclass – Kannika
Спасибо за ссылку, но я хочу, чтобы захватить событие с помощью Javascript, так как я не программирую собственное приложение для Blackberry. В моем случае нажатие клавиши backspace не запускает какое-либо событие (не 'keypress', не' keydown' или 'keyup'). – Pablo