2009-03-13 10 views
9

De un texto de entrada tengo que llamar a una función para capturar el evento onkeydown y necesito pasar un parámetro a ese evento, por ejemplo:Firefox onKeyDown detectar pulsa la tecla

<input type="text" onkeydown="TextOnKeyDown('myPrefix');" />... 

Luego, en esa función que necesito para saber qué tecla se presionó. Yo uso

function TextOnKeyDown(prefix) { 
    var key = event.keyCode; 
    ... 
} 

Esto funciona como un encanto en IE, pero no en Firefox. He leído que para Firefox que tiene que pasar un argumento al manejador y luego utilizarlo para conseguir la llave, algo similar a:

<input type="text" onkeydown="detectKey(event)"/> 
... 
function detectKey(e){ 
    var key = (document.all) ? e.keyCode : e.which; 
    ...  
} 

Pero no puedo llegar a pasar mi parámetro y el parámetro de evento necesario para Firefox. ¿Alguna sugerencia?

Respuesta

7

Ninguna de las soluciones propuestas funcionó ya que lo que necesitaba era agregar mi propio parámetro aparte del parámetro de "evento" necesario para que Firefox obtenga el código de clave. De todos modos la ayudó, gracias chicos. Puedo poner la solución final para los futuros lectores:

Al final sólo tenía que añadir el parámetro "evento" a la persona que llama:

<input type="text" onkeydown="TextOnKeyDown('myPrefix', event);" /> 

y el manejador:

function TextOnKeyDown(prefix, evt) {  
    var key = (evt.which) ? evt.which : evt.keyCode; 
... 
} 

De alguna manera, no funcionó antes, no sé por qué.

0

Puede utilizar arguments[0]:

<input type="text" onkeydown="detectKey(arguments[0])"/> 

Para obtener el evento IE allí también se podría hacer:

<input type="text" onkeydown="detectKey(arguments[0] ? arguments[0] : event)"/> 

o cambiar su función detectKey(e) para comprobar si se ajusta e y utilizar event si no es.

7

Yo uso esta en Firefox y funciona:

<input .... onkeypress="return isNumberKey(event);"> 

y luego la funcion JS:

function isNumberKey(evt) 
{ 
    var charCode = (evt.which) ? evt.which : evt.keyCode 
    if(charCode==37||charCode==39||charCode==46)return true; 
    if (charCode > 31 && (charCode < 48 || charCode > 57)) 
    return false; 

    return true; 
} 
9

escribí esto ayer, funciona tanto en FF y IE =>

//execute this during initialization 
document.onkeydown = function(event) { 
    var holder; 
    //IE uses this 
    if(window.event) { 
     holder = window.event.keyCode; 
    } 
    //FF uses this 
    else { 
     holder = event.which; 
    } 
    keyz(holder); 
} 

function keyz(key) { 
    if(key === /*desired code*/) { 
     /*execute stuff*/ 
    } 
} 

deseará reemplazar document.onkeydown con [su entrada] .onkeydown

1

Un giro más aquí que combina conseguir el evento y el código clave:

function calledOnKeypress(winEvent) { 
    var keyCode; 
    // event passed as param in Firefox, not IE where it's defined as window.event 
    if(!winEvent) { 
     winEvent = window.event; 
     keyCode = winEvent.keyCode; 
    } 
    else { // ff 
     keyCode = winEvent.which; 
    } 
} 
Cuestiones relacionadas