2012-08-29 8 views
16

que fue víctima de un Firefox keydown comportamiento en que al presionar la tecla enter (de hecho cualquier tecla) sin tener foco en un campo específico no se disparará un evento keydown lo hará único desencadenante un evento keypress.event.keyCode vs event.which

Esto podría ser muy confuso, ya que el uso de eventos keydown y keyup JavaScript códigos de teclas mientras que pulsación de tecla utiliza códigos ASCII. Afortunadamente 13 (entrar/regresar) es común a ambos.

¿Hay algún motivo conocido por el que FF utilice la tecla presionando en esta circunstancia? ¿Cuál es el beneficio?

Una vez que esto se estableció IE8 vomitó un tonto, ya que no permite preventDefault exigiendo en su lugar returnValue = false el siguiente fragmento de otro SO posterior ha demostrado ser muy útil:

event.preventDefault ? event.preventDefault() : event.returnValue = false; 

Durante la búsqueda de resolver estos problemas que me han confundido consistentemente por event.keycode vs event.which. A saber que estoy haciendo mal uso de una sentencia switch similar a:

$("#class_Name").bind("keydown", function(event){ 
    // do not test input if field controls used 
    switch(event.which){ 
     case 13: 
     //enter key 
     event.preventDefault ? event.preventDefault() : event.returnValue = false; 
     break; 
    } 


es la siguiente mejor, si es así ¿por qué?

$("body").keypress(function(event){ 
    // stop inadvertant form submission 
    if (event.keycode == "13"){ 
     event.preventDefault ? event.preventDefault() : event.returnValue = false; 
    } 
}); 


me gustaría saber para que yo sepa que es la mejor manera de aplicar.

Muchas gracias.

+1

Usted sabe que jQuery normaliza las diferencias entre los navegadores? En jQuery, se espera que 'event.which' sea coherente en todos los navegadores. Además, 'event.preventDefsult();' de jQuery también funcionará en OldIE. –

+0

@Rob W, hola Rob sí, de hecho, estaba al tanto de esto. La documentación en línea de jquery documenta el uso del evento que he usado. Muchas publicaciones muestran que aquí no se usa el código clave. De ahí la pregunta. Entiendo que event.preventDefsult(); debería funcionar en todas partes. – codepuppy

+0

¿Se pregunta si podemos obtener una actualización sobre esto para navegadores relevantes en 2016? – Faust

Respuesta

10

Algunos buscadores usan keyCode y otros usan which. Pero con jQuery esto es normalizado por lo que no tiene que pensar en eso. Usted puede simplemente elegir el que prefiera.

+3

solo para el caso de que el evento haya sido generado por jquery. Capturar eventos nativos y normalizarlos no es posible – Toskan

7

Según this comment jQuery puede ser poco fiable y this page dice:

event.which no está definida en el IE 9 en < keydown y keyup.

event.keyCode es 0 en Gecko (Seamonkey, Firefox) en keypress para las claves que devuelven un caracter.

event.charCode solo es compatible con keydown y keyup por Internet Explorer (Mac).

Try it on JSFiddle

+2

Esto me ayudó. Debe ser la respuesta aceptada. Estoy usando la siguiente línea para normalizar estas propiedades: 'var code = event.which || event.keyCode || event.charCode; ' Esto capta el campo que no sea nulo o 0. Si todos son cero, devuelve 0. –

Cuestiones relacionadas