Capture de la touche «Supprimer» avec jQuery

118

Lorsque vous utilisez l'exemple de code de la documentation jQuery pour le gestionnaire d'événements keypress, je ne parviens pas à capturer la Deleteclé. L'extrait ci-dessous va se connecter 0lorsque la Deletetouche est enfoncée dans FireFox:

$(document).keypress(function(e) {
    console.log(e.which);       
});

Il semble qu'il y ait un moyen de capturer la Deleteclé, mais c'est un terme ambigu, donc Google ne s'avère pas d'une grande aide.

Shane H
la source

Réponses:

202

Vous ne devez pas utiliser l' keypressévénement, mais l' événement keyupou keydowncar l' keypressévénement est destiné à des caractères réels (imprimables). keydownest gérée à un niveau inférieur afin de capturer toutes les clés non imprimables comme deleteet enter.

Philippe Leybaert
la source
keyupferait mieux le travail.
localhoost
2
@atilkan non, l'utilisateur attend des commentaires keydown, non keyup. Tous les éditeurs de texte exécutent des actions lorsqu'une touche est enfoncée, pas lorsqu'elle est relâchée.
Philippe Leybaert
1
@PhilippeLeybaert Dans mon cas, le programme ne peut pas attraper le dernier caractère pressé.
localhoost
82
$('html').keyup(function(e){
    if(e.keyCode == 46) {
        alert('Delete key released');
    }
});

Source: codes de caractères javascript codes clés de www.cambiaresearch.com

Tod Palin
la source
18
Ça devrait être alert('Delete Key Released').
Waldheinz
si quelqu'un utilise keypress au lieu de keyup a suggéré par Tod alors vous obtiendrez un événement keycode == 46 contre. touche (point). mais cela fonctionne bien avec keyUp. Merci
Mubashar
34

Codes clés Javascript

  • e.keyCode == 8 pourbackspace
  • e.keyCode == 46 pour le bouton forward backspaceou deletedans les PC

Sauf ce détail, la réponse de Colin & Tod fonctionne.

csonuryilmaz
la source
4
Ce devrait être e.keyCode et non e.KeyCode
Jerome
16

event.key === "Supprimer"

Plus récent et beaucoup plus propre: utilisation event.key. Fini les codes numériques arbitraires!

REMARQUE: les anciennes propriétés ( .keyCodeet .which) sont obsolètes.

document.addEventListener('keydown', function(event) {
    const key = event.key; // const {key} = event; ES6+
    if (key === "Delete") {
        // Do things
    }
});

Documents Mozilla

Navigateurs pris en charge

Gibolt
la source