J'essaie d'implémenter une fonctionnalité de touche presse qui supprime un div lorsque l'utilisateur clique sur Esc
. Cela fonctionne pour Firefox & IE avec le code suivant:
$("body").keypress(function(e) {
alert("any key pressed");
if (e.keyCode == 27) {
alert("escape pressed");
}
});
Si je frappe une touche quelconque, la première alert
est affichée, et si je frappe Echap, la seconde alert
est également affichée.
Cela ne fonctionne pas avec Chrome cependant. La première alert
est toujours affichée si j'appuie sur l'une des lettres, mais pas lorsque vous appuyez sur Echap, Tab, Espace ou sur l'un des chiffres.
Pourquoi serait-ce? Existe-t-il un moyen de forcer Chrome à répondre à ces pressions
Essayez plutôt de manipuler keydown
.
utilisez keydown . keypress ne fonctionne pas avec ESC dans Chrome (vous ne connaissez pas les autres navigateurs)
$(newTag).keydown(function(e) { //keypress did not work with ESC;
if (event.which == '13') {
ProfilePage.saveNewTag(search_id, $(newTag).val());
}
else if (window.event.which){
$(newTag).remove();
}
});
Pour la touche ESC:
$(document).keydown(function(e) {
if(e.keyCode == 27) { /* Run code */ }
}
Pour les touches alphabétiques, comme 'L':
$(document).keypress(function(e) {
if(e.which == 108) { }
});
Fonctionne dans Chrome et Firefox
Après la deuxième alerte, ajoutez également
e.preventDefault();
Cela empêchera l'action par défaut de l'événement d'être déclenchée.
Plus d'informations sur cette méthode ici
Votre code devrait ressembler à
$("body").keypress(function(e) {
alert("any key pressed");
if (e.keyCode == 27) {
alert("escape pressed");
e.preventDefault();
}});
Appuyez sur 'ESC'
e.which: 0
e.keyCode: 27
keyup 'ESC'
e.which: 27
e.keyCode: 27
Pour les caractères non imprimables, mieux vaut utiliser keyup
.
En utilisant le fichier jquery.hotkeys js, vous pouvez créer une touche de raccourci
$(document).bind('keydown', 'esc', function(){ });