2009-12-04 12 views
68

Me gustaría saber qué tecla de carácter se presiona en una forma compatible con varios navegadores en javascript puro.¿Cómo saber qué tecla de carácter se presiona?

+0

no son todas estas respuestas para la pregunta "¿qué _was_ tecla pulsada?" ¿Qué pasa si, mientras se está ejecutando, el código de JavaScript quiere saber si una tecla en el teclado se mantiene presionada actualmente? – mwardm

+0

'event.key' le dará directamente el carácter presionado – Gibolt

Respuesta

117

"Borrar" JavaScript:

<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

esto funciona bien para los caracteres alfabéticos, pero ¿qué pasa con los puntos/los brakets y otros símbolos tipográficos? – VoVaVc

+5

@VoVaVc: Funciona para aquellos también. Lo más importante es usar el evento 'keypress', que le da un código de carácter, en lugar de' keyup' o 'keydown', que le da un código de tecla. –

+0

'e.which' está en desuso. Use 'e.key' en su lugar, como en' if (e.key == 'z') ' – aljgom

2

Tener un vistazo a este sitio para navegadores inconsistencias http://www.quirksmode.org/js/keys.html

+0

Sólo en el evento de pulsación de tecla en algunos navegadores (especialmente no en Firefox). –

+0

@Tim Buen punto - en realidad lo eliminaré. – Matt

1

Uso ésta:

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

hay un millón de copias de esta pregunta aquí, pero aquí va de nuevo de todos modos:

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

La mejor referencia sobre los acontecimientos clave que he visto es 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

¿No es este un duplicado casi exacto de la respuesta de @ Coyod en 2009? –

1

Una de mis librerías favoritas para hacer esto de una manera sofisticada es Mousetrap.

Viene equipado con una variedad de complementos, uno de los cuales es el complemento record que puede identificar una secuencia de teclas presionadas.

Ejemplo:

<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

Cierto. Hará. –

+0

@DanLowe Acabo de agregar un fragmento. –

3

más reciente y mucho más limpia: event.key utilizar. ¡No más códigos de números arbitrarios!

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

Si desea hacer seguro que se introducen caracteres individuales solamente, compruebe key.length === 1, o que es uno de los caracteres que se pueden esperar.

Mozilla Docs

Supported Browsers

-1
document.onkeypress = function(event){ 
    alert(event.key) 
} 
Cuestiones relacionadas