2010-06-16 17 views
56

¿Cuál es la funcionalidad del evento javascript e.which? Por favor, breve con el ejemplo.javascript event e.which?

+5

¿por qué entonces necesitamos un foro? Todos pueden google sus consultas. Es para compartir el conocimiento. – minil

+34

Dos años después, estaba teniendo problemas para entender esta propiedad después de leer varias páginas en otro lugar. Luego me encontré con esta publicación anterior y la obtuve. Entonces, para @Reigel, quizás reconsidere antes de decirle a alguien que busque algo en Google. Quizás ya lo hicieron. Ese no es el propósito de SO. – Aerovistae

+4

Lo mismo para @JuanMendes – Aerovistae

Respuesta

55

e.which no es un evento, which es una propiedad del objeto event, que la mayoría de la gente etiqueta como e en sus controladores de eventos. Contiene el código de tecla de la tecla que se presionó para activar el evento (por ejemplo: keydown, keyup).

document.onkeypress = function(myEvent) { // doesn't have to be "e" 
    console.log(myEvent.which); 
}; 

Con ese código, la consola imprimirá el código de cualquier tecla que presione en el teclado.

+1

Realmente no requiere Firebug, solo algún tipo de console.log (que muchos más de Firebug proporciona, por ejemplo, el webkitt-ens). – npup

+1

'which' también existe en eventos de mouse, y su ejemplo no funcionará en IE, en el que un controlador de eventos no recibe un parámetro de evento. –

+3

Solo otra nota de ayuda para todos los que encuentren esto (se publicará en otras preguntas e.which prolly también). Hice una publicación en jQuery foros que enumeran una buena mayoría de e.which códigos y sus claves asociadas. La publicación está aquí -> http://forum.jquery.com/topic/eventwhich-code-list-just-for-help – SpYk3HH

71

which es una propiedad de objetos Event. Se define para eventos relacionados con la clave y el mouse en la mayoría de los navegadores, pero en ambos casos no está definido en IE (antes de la versión 9).

Para eventos relacionados con el mouse, which especifica el botón del mouse que estaba involucrado. Para IE < 9, el valor equivalente se encuentra en window.event.button. Para complicar las cosas, los navegadores no IE también admiten una propiedad button de eventos de mouse que a veces informa un valor diferente de which. Además, los navegadores a veces tienen diferentes valores para el mismo botón o combinación de botones. Si usted se pega a la utilización de which en todos los navegadores que lo soportan y button < en IE 9, la única constante es que un valor de 1 significa siempre el botón izquierdo del ratón estaba implicado (aunque no necesariamente solo).

document.onmousedown = function(e) { 
    e = e || window.event; 
    var button = (typeof e.which != "undefined") ? e.which : e.button; 
    if (button == 1) { 
     alert("Left mouse button down"); 
    } 
}; 

Para un análisis completo, recomiendo Jan Wolter's article on JavaScript mouse events.

Para eventos relacionados con la clave, which se relaciona con la tecla que se ha presionado. Para keydown y keyup eventos, esto es relativamente simple: es el código de tecla para la tecla pulsada, y devuelve el mismo valor que la propiedad del evento keyCode. Dado que todos los navegadores admiten la propiedad keyCode y IE < 9 no es compatible con which, generalmente debe usar keyCode para los eventos keydown y keyup.

Para keypress acontecimientos, la situación es más complicada. Para las teclas de caracteres imprimibles, which es el código de carácter para la tecla presionada y es compatible con más navegadores que la propiedad charCode. En IE < 9, el equivalente es nuevamente la propiedad keyCode. Entonces, para detectar el carácter escrito, el siguiente es un enfoque de navegador cruzado. Tenga en cuenta que el código de abajo no debe utilizarse para las llaves no imprimibles, como las teclas de flecha, que en su lugar debe detectar en caso keydown:

document.onkeypress = function(e) { 
    e = e || window.event; 
    var charCode = (typeof e.which == "number") ? e.which : e.keyCode; 
    if (charCode) { 
     alert("Character typed: " + String.fromCharCode(charCode)); 
    } 
}; 

Una vez más, para más detalles recomiendo Jan Wolter's article on JavaScript key events

+2

No entiendo por qué esta no es la respuesta aceptada? – Toskan

+5

@Toskan: La respuesta aceptada fue publicada unas horas antes que la mía, y puede haber sido aceptada antes de publicar la mía. –

+1

OP deja _Tim down_ al no aceptar esto como respuesta! :) – sohaiby

5

Este la función se ha eliminado de los estándares web. Aunque algunos navegadores aún pueden soportarlo, está en proceso de descarte. No lo use en proyectos antiguos o nuevos. Las páginas o aplicaciones web que lo usan pueden romperse en cualquier momento.

En su lugar, debe usar KeyboardEvent.key, si está disponible.

http://codepen.io/KevinOrfas/pen/QKbKAd

3

Durante un evento, e:

e.which 

es igual que:

e.keyCode 

Así ambas funciones le permiten obtener el código clave de la tecla pulsada durante una pulsación de tecla, evento de keydown o keyup

Muchas personas use || (O) para asegurarse de que su código funcione en los navegadores que no admiten esa propiedad. Mira el siguiente código:

document.onkeypress = function(e) { 
    var key = e.which || e.keyCode; 
    alert(key); 
} 
+0

Hola chicos, mi respuesta es correcta, ¡pruébalo! –