2012-01-20 9 views
23

Estoy tratando de establecer keyCode en el objeto de evento enviado.KeyboardEvent en Chrome, keyCode es 0

Al hacer clic en un botón, se produce un evento en el control de cuadro de texto para simular un evento de tecla. El evento se genera con éxito, pero el código de clave es 0. Necesito enviar el objeto de evento con el código de clave correcto al cuadro de texto. He estado usando el código de here.

¿Cómo se establece el valor del código clave en el evento enviado?

<html> 
    <head>  
    </head> 
    <body> 
     <input type="button" id="btn" value="Click"></input> 
     <input type="text" id="txt"></input> 
     <script> 
      document.getElementById('btn').addEventListener("click", btnClick); 
      document.getElementById('txt').addEventListener("keydown", txtKeydown);   

      function btnClick(e) { 
       var txt = document.getElementById('txt');    

       var dispatchKeyboardEvent = function(target, initKeyboradEvent_args) { 
        var e = document.createEvent("KeyboardEvents"); 
        e.initKeyboardEvent.apply(e, Array.prototype.slice.call(arguments, 1)); 
        e.keyCode = 83; 
        e.charCode = 0; 
        target.dispatchEvent(e); 
       }; 

       var canceled = !dispatchKeyboardEvent(txt, 
       'keydown', true, true, // type, bubbles, cancelable 
       window, // window 
       's', // key 
       0, // location: 0=standard, 1=left, 2=right, 3=numpad, 4=mobile, 5=joystick 
       false, false, false); // Ctr, Alt, Shift 
      } 

      function txtKeydown(e) { 
       console.dir(e); 
       console.log(e.keyCode); 
      } 

     </script> 
    </body> 
</html> 
+0

Hay una solución muy inteligente para esto, consulte: http://stackoverflow.com/questions/10455626/keydown-simulation-in-chrome-fires-normally-but-not-the-correct-key/10520017 # 10520017 Esto le permitirá establecer las propiedades que necesita y enviar un evento de tecla arriba/abajo. Código de muestra incluido. – Orwellophile

Respuesta

9

Parece que ha pasado un tiempo desde que lo solicitó, por lo que quizás ya haya encontrado la respuesta a su pregunta. En caso de que no lo haya hecho, existe un bug in Webkit como se señaló en this SO question que hace que el código de clave siempre sea 0. Al parecer, no hay mucho que pueda hacer hasta que lo arreglen. Lamentablemente, no parece que nadie esté realmente trabajando en eso. No es la respuesta que quieres escuchar, pero en realidad es la única respuesta que alguien puede darte por esto en este momento.

34

Me sorprende que este error haya estado ahí durante mucho tiempo. Parece haber una solución usando eventos genéricos. Aquí hay una demostración: http://jsbin.com/awenaq/3

+9

¡Este error * aún * existe! –

+0

@Philip podría explicar la demostración? Parece que ha ingresado los códigos clave para los botones presionados, lo cual no es una solución para que Chrome no pueda decir qué tecla presionar. – ProblemsOfSumit

+0

@Sumit: la demostración muestra cómo usar un evento genérico en lugar de KeyboardEvent cuando ** desencadena manualmente ** eventos. –

0

He tenido el mismo problema con dispositivos Android como Sony Xperia y HTC Devices. Así que encontré una solución alternativa: consulte mi respuesta para esta pregunta KeyCode Returns 0 Always

0

No es un error ... esta característica se está eliminando, obsoleto, prohibido, whateva 'el nombre será mañana ... Usted no puede confiar en que esta característica funcione por mucho tiempo. ... y es un riesgo de seguridad muy abierto ... encuentre otra forma de hacer lo que está tratando de hacer. Consulta las especificaciones de MOZILLA y verás BIG BAD RED BANNER que advierte para evitar esto como la peste. No van a solucionarlo, devolviendo 0 se detienen eficazmente el sangrado sin cambiar el código, salvo en un lugar donde siempre zapping el código clave a 0.

0

Si tiene jQuery:

$.Event(event, { keyCode: 13 });

Este es el uso previsto.
Source.