2011-05-24 11 views
8

Estoy usando este código para verificar la clave y mostrar la cadena 'Presionada' mientras la tecla está presionada.window.event.keyCode ¿cómo hacerlo en Firefox?

<body onKeyDown="doKey(window.event.keyCode)" onKeyUp="doKey2(window.event.keyCode)"> 

<script> 
function doKey($key) { 
    document.getElementById('keydown').innerHTML='Pressed'; 
} 

function doKey2($key) { 
    document.getElementById('keydown').innerHTML=''; 
} 
</script> 

<div id="keydown"></div> 

El problema es que, por alguna razón, solo funciona en Chrome. Creo que el 'window.event.keyCode' no devuelve nada. ¿Cómo hago que funcione al menos en Firefox también? Gracias

+0

Esto funcionará para ti, 'var key = event.keyCode || event.charCode; ' –

Respuesta

14
<html> 
    <body onKeyDown="doKey(event)" onKeyUp="doKey2(event)"> 

    <script> 
    function doKey(e) { 
     evt = e || window.event; // compliant with ie6   
     document.getElementById('keydown').innerHTML = evt.keyCode+' Pressed'; 
    } 

    function doKey2(e) { 
     document.getElementById('keydown').innerHTML=''; 
    } 
    </script> 

    <div id="keydown"></div> 
    </body> 
</html> 

Si pasamos event como parámetro, la mayoría de los navegadores modernos funcionan bien. Lo he probado con Chrome 12, Firefox 4, IE 7/8/9.

21

Algunos navegadores tienen un objeto de evento global, otros envían el objeto de evento al controlador de eventos como parámetro. Chrome e Internet Exlporer usan el primero, Firefox usa el último.

Algunos buscadores usan keyCode, otros usan charCode.

Uso arguments[0] para recoger el objeto de evento enviado como parámetro, y si no hay ningún objeto existe, no es un objeto global en su lugar:

onkeydown="doKey(arguments[0] || window.event)" 

En el método se puede comprobar, ya sea para keyCode o charCode

function doKey(event) { 
    var key = event.keyCode || event.charCode; 
    ... 
} 

Tenga en cuenta el nombre en minúscula onkeydown. Si está utilizando nombres de eventos XHTML debe estar en minúscula, o el navegador puede ignorarlo.

+0

Parece que de esta manera obtengo la clave y la clave, pero la clave de valor siempre es 0 en lugar del código clave correspondiente ... ¿Sabes cuál podría ser el problema? He probado el código aquí: http://www.chusmix.com/game/beta/move.php Se puede ver el código clave en keydown pero siempre es 0. – lisovaccaro

+0

@ Liso22: Podría ser que Don No tengo un doctype en la página ... Cuando ejecuto esta prueba en Firefox, IE, Opera, Safari y Chrome, funciona: http://jsfiddle.net/U7Xpp/ – Guffa

0

Me he encontrado con el mismo problema, ya que estoy seguro de que miles de programadores tienen.

El problema es que a los navegadores (que no sean IE) no les gusta window.event.

estoy asomando por intentar encontrar una solución (que es como me encontré con este), y me encontré con lo siguiente (hasta ahora):

1) JQuery:

$(document).keyup(function(e) { 
     var GetKey = e.keyCode; 
`enter code here` 
     } 
    }); 

2) Redefina la variable clave:

var key = (window.event) ? evt.keyCode : evt.which; 

He probado la solución JQuery. Parece que está bien en FF, pero me encontré con un error inesperado en IE que todavía estoy tratando de resolver. Todavía no he probado la segunda solución; eso es lo siguiente, si no puedo hacer que JQuery funcione.

Cuestiones relacionadas