Ich bin gerade auf diese Belästigung gestoßen und habe diese Frage bei meiner Suche nach Antworten gefunden, also hier sind Details meiner Untersuchung und Lösung (gut, Workaround).
Die keyup
und keydown
Ereignisse einfach nicht auf input
oder textarea
Elemente in dem Blackberry-Browser, wenn die Taste gedrückt wird, die Rück ausgelöst werden. Es wird jedoch ausgelöst werden, wenn der Event-Handler an die document
gebunden ist:
$("#myInput").keydown(someFn); //Will not fire for backspace
$(document).keyup(someFn); //Will fire for backspace
Warum dies der Fall ist, ich habe absolut keine Ahnung. Das Ereignis keyup
sollte sprudeln, und das tut es, aber da es nicht einmal feuert, wenn Sie die Rücktaste drücken, ist das nicht viel sinnvoll.
Allerdings gibt es noch ein weiteres Ereignis. Das Ereignis input
wird vom Blackberry-Browser unterstützt und wird korrekt ausgelöst, wenn sich der Wert des Elements ändert (einschließlich glücklicherweise für uns, wenn diese Änderung auf ein Drücken der Rücktaste zurückzuführen ist).
Daher können wir das Problem umgehen, indem wir Event-Handler sowohl an keydown
als auch an input
binden. Das Ereignis keydown
wird vor input
ausgelöst, außer wenn die Rücktaste gedrückt wird. In diesem Fall wird keydown
nicht ausgelöst.So können wir verfolgen, dass halten ganz einfach:
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);
Einige Anmerkungen:
Soweit ich das sagen kann, ist nur ein Problem im Browser auf Blackberry 6 ich getestet habe Blackberry 5 (physisches Gerät und Simulator) und 7 (Simulator) und beide feuern die Ereignisse keydown
und keyup
für die Rücktaste ab.
Diese „fix“ funktioniert fast in jeden einzelnen Browser ich es getestet habe (so können Sie es verwenden, um richtig Blackberry 6, ohne zu brechen anderen Browser) außer Opera Mobile (getestet in Version 12), die aus irgendeinem Grunde mag das input
Ereignis manchmal zweimal abfeuern.
Damit können Sie nur die Rücktaste drücken, wenn sich Text in der zu löschenden Eingabe befindet (andernfalls wird das Ereignis input
nicht ausgelöst). Dies ist wahrscheinlich der größte Fehler des Skripts.
Sie können ein funktionierendes Beispiel here finden, aber für das Testen von mobilen Geräten ist es schneller, das embedded version zu laden.
Diese Antwort vielleicht, was Sie wollen: http://stackoverflow.com/questions/942037/how-do-i-detect-the-delete-key-in-my-field-subclass – Kannika
Vielen Dank für den Link, aber ich möchte das Ereignis mit Javascript erfassen, da ich keine native Anwendung für Blackberry programmiere. In meinem Fall wird durch Drücken der Rücktaste kein Ereignis ausgelöst (nicht 'keypress', weder' keydown' noch 'keyup'). – Pablo