2009-12-04 6 views
68

Je voudrais savoir quelle touche de caractère est pressée d'une manière compatible avec tous les navigateurs en javascript pur.Comment savoir quelle touche de caractère est enfoncée?

+0

ne sont pas toutes ces réponses à la question "quelle touche enfoncée was?" Que se passe-t-il si, en cours d'exécution, le code javascript veut savoir si une touche du clavier est actuellement enfoncée? – mwardm

+0

'event.key' vous donnera directement le caractère pressé – Gibolt

Répondre

117

JavaScript "Effacer":

<script type="text/javascript"> 
    function myKeyPress(e){ 
    var keynum; 

    if(window.event) { // IE      
     keynum = e.keyCode; 
    } else if(e.which){ // Netscape/Firefox/Opera     
     keynum = e.which; 
    } 

    alert(String.fromCharCode(keynum)); 
    } 
</script> 

<form> 
    <input type="text" onkeypress="return myKeyPress(event)" /> 
</form> 

JQuery:

$(document).keypress(function(event){ 
    alert(String.fromCharCode(event.which)); 
}); 
+6

cela fonctionne bien pour les caractères alphabétiques, mais qu'en est-il des points/brakets et autres symboles typogtaphic? – VoVaVc

+5

@VoVaVc: Cela fonctionne aussi pour ceux-là. L'essentiel est d'utiliser l'événement 'keypress', qui vous donne un code de caractère, plutôt que' keyup' ou 'keydown' qui vous donne un code clé. –

+0

'e.qui' est obsolète. Utilisez 'e.key' à la place, comme dans' if (e.key == 'z') ' – aljgom

2

Jetez un oeil sur ce site pour le navigateur cross incohérences http://www.quirksmode.org/js/keys.html

+0

Seulement sur l'événement de pression de touche dans certains navigateurs (notamment pas Firefox). –

+0

@Tim Bon point - en fait, je vais le retirer. – Matt

1

Utilisez celui-ci:

function onKeyPress(evt){ 
    evt = (evt) ? evt : (window.event) ? event : null; 
    if (evt) 
    { 
    var charCode = (evt.charCode) ? evt.charCode :((evt.keyCode) ? evt.keyCode :((evt.which) ? evt.which : 0)); 
    if (charCode == 13) 
     alert('User pressed Enter'); 
    } 
} 
22

Il y a un million de doublons de cette question ici, mais voilà à nouveau quand même:

document.onkeypress = function(evt) { 
    evt = evt || window.event; 
    var charCode = evt.keyCode || evt.which; 
    var charStr = String.fromCharCode(charCode); 
    alert(charStr); 
}; 

La meilleure référence que je l'ai vu sur les événements clés est http://unixpapa.com/js/key.html.

1
**check this out** 
<!DOCTYPE html> 
<html> 
<head> 
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> 
<script> 
$(document).ready(function(){ 
    $(document).keypress(function(e) 
     { 

      var keynum; 
      if(window.event) 
      { // IE     
       keynum = e.keyCode; 
      } 
       else if(e.which) 
        { 
        // Netscape/Firefox/Opera     
        keynum = e.which; 
        } 
        alert(String.fromCharCode(keynum)); 
        var unicode=e.keyCode? e.keyCode : e.charCode; 
        alert(unicode); 
     }); 
}); 

</script> 
</head> 
<body> 

<input type="text"></input> 
</body> 
</html> 
+1

N'est-ce pas une copie quasi-exacte de la réponse de @ Coyod en 2009? –

1

Une de mes bibliothèques préférées pour faire ceci d'une manière sophistiquée est Mousetrap.

Il est livré avec une variété de plugins, dont l'un est le plugin record qui peut identifier une séquence de touches enfoncées.

Exemple:

<script> 
    function recordSequence() { 
     Mousetrap.record(function(sequence) { 
      // sequence is an array like ['ctrl+k', 'c'] 
      alert('You pressed: ' + sequence.join(' ')); 
     }); 
    } 
</script> 


<button onclick="recordSequence()">Record</button> 
+0

C'est vrai. Ça ira. –

+0

@DanLowe Je viens d'ajouter un extrait. –

3

Plus récent et plus propre: utilisez event.key. Plus de codes numériques arbitraires!

node.addEventListener('keydown', function(event) { 
    const key = event.key; // "a", "1", "Shift", etc. 
}); 

Si vous voulez faire des caractères simples sont sûrs que sont entrés, vérifiez key.length === 1, ou qu'il est l'un des personnages que vous attendez.

Mozilla Docs

Supported Browsers

-1
document.onkeypress = function(event){ 
    alert(event.key) 
} 
Questions connexes