2010-09-11 11 views
17

¿Cómo puedo vincular una función con los eventos de bajada/subida de clave?Evento de vinculación/reducción de vinculación de Javascript

Puede vincularse a todo el documento o a un solo elemento; o bien funcionará en este caso.

Esto tiene que estar sin ninguna biblioteca de JavaScript. Solo me preocupa principalmente el último Firefox. Particularmente el elemento de lona.

He intentado esto: (FF 3.6.9 Windows 7) solamente

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 
<html> 
    <head> 
     <title>Test</title> 
    </head> 
    <body> 
     <div class="wrapper"> 
      <canvas id="game" width="800" height="400"> 
      </canvas> 
     </div> 
     <script type="text/javascript"> 
      var el = document.getElementById("game"); 

      el.onkeydown = function(evt) { 
       evt = evt || window.event; 
       alert("keydown: " + evt.keyCode); 
      }; 

      el.onkeyup = function(evt) { 
       evt = evt || window.event; 
       alert("keyup: " + evt.keyCode); 
      }; 
     </script> 
    </body> 
</html> 

Respuesta

38

eventos clave fuego en el documento y elementos que pueden recibir el foco. Por lo tanto, para manejar eventos clave en un elemento <canvas>, debe permitir que reciba el foco agregando un atributo tabindex (por ejemplo, <canvas id="game" width="800" height="400" tabindex="1"></canvas>) o simplemente manejando eventos clave para todo el documento, que puede no ser lo que desea (por ejemplo, si tiene más de un elemento en la página para la que desea manejar eventos clave).

cuanto a cómo colocar los controladores de eventos, la forma más sencilla es la siguiente:

var el = document.getElementById("your_element_id"); 

el.onkeydown = function(evt) { 
    evt = evt || window.event; 
    alert("keydown: " + evt.keyCode); 
}; 

el.onkeyup = function(evt) { 
    evt = evt || window.event; 
    alert("keyup: " + evt.keyCode); 
}; 

Si es posible que tenga múltiples oyentes, puede utilizar addEventListener en la mayoría de los navegadores o attachEvent en IE < = 8:

if (typeof el.addEventListener != "undefined") { 
    el.addEventListener("keydown", function(evt) { 
     alert("keydown: " + evt.keyCode); 
    }, false); 
} else if (typeof el.attachEvent != "undefined") { 
    el.attachEvent("onkeydown", function(evt) { 
     alert("keydown: " + evt.keyCode); 
    }); 
} 
+0

No pude conseguir que esto funcione, ver edición – Petah

+4

Esto se debe a que el elemento '' no puede recibir el enfoque por defecto. Tiene dos opciones: o bien puede agregar un atributo 'tabindex' a su etiqueta canvas para permitir que reciba el foco o puede adjuntar los manejadores de eventos clave a' document' en su lugar. –

+0

Bien, funciona cuando se asigna al documento. – Petah

Cuestiones relacionadas