web-dev-qa-db-fra.com

jQuery "Keypress" ne fonctionne pas pour certaines clés dans Chrome. Comment travailler?

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

60
DaveDev

Essayez plutôt de manipuler keydown.

113
SLaks

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();
    }
}); 
18
bear

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

2
Dylan Foregger

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();
}});
1
ppolyzos

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.

1
Gayan Weerakutti

En utilisant le fichier jquery.hotkeys js, vous pouvez créer une touche de raccourci 

$(document).bind('keydown', 'esc', function(){ });
0
ghodasara keval