2009-03-04 25 views
5

¿Cuál es la forma más robusta de crear un manejador de atajo de teclado global para una aplicación web usando JavaScript, es decir qué evento (s) debo manejar ya qué controlador (es) del evento se debe adjuntar?Manejo de atajos de teclado robusto usando JavaScript

Quiero algo así como el sistema en Gmail que puede manejar atajos de teclas simples y también accesos directos con teclas modificadoras, p. Ctrl + B etc. El código tiene que funcionar en IE 6 así como también en navegadores modernos.

Tengo el marco de Prototype disponible para usar pero no jQuery, así que por favor, ¡no hay respuestas específicas de jQuery!

+0

http://www.openjs.com/scripts/events/keyboard_shortcuts/ – James

+0

Lo comprobaré, gracias. ¿Por qué no publicaste como respuesta? –

Respuesta

5

La biblioteca HotKey disponible en el paquete de controles LivePipe funciona con Prototype y es compatible con IE.

http://livepipe.net/extra/hotkey

+0

Voy a aceptar su respuesta porque esto parece exactamente lo que estoy buscando y porque hay muchas otras cosas interesantes en ese sitio, ¡así que gracias! –

+0

Ten en cuenta que HotKey aparentemente acepta combinaciones si se presionan modificadores no especificados (por ejemplo, se especifica ctrl + a, se presiona ctrl + shift + a, se detecta ctrl + a). – eyelidlessness

+0

También sería bueno si detectara OS X y reemplazara ctrl con cmd/meta. – eyelidlessness

3

Lo que haría sería adjuntar eventos KeyUp al document.body. Luego, en este controlador de eventos, utilizaría el método Element.fire para activar un evento personalizado. Aunque este paso es opcional, ayudará a desacoplar el controlador de eventos de la acción que se realizará, y puede usar el mismo controlador de eventos personalizados de decir un evento de clic de botón.

$(document.body).observe("keyup", function() { 
    if(/* key + modifier match */) { 
     $(document.body).fire("myapp:mycoolevent"); 
    } 
}); 

$(document.body).observe("myapp:mycoolevent", function() { 
    // Handle event. 
}); 

Más tarde, para unir el mismo evento a un clic de botón:

$(button).observe("click", function() { 
    $(document.body).fire("myapp:mycoolevent"); 
}); 

Por lo que el manejo de las teclas modificadoras se refiere, echa un vistazo a this resource (muy viejo, pero todavía se ve el caso) para obtener más ayuda .

+0

Keyup parece problemático. Al menos en OS X (pero creo que también es cierto en Windows y en la mayoría de los WM de Linux), la mayoría de los comandos clave se activan en el teclado. Esta expectativa (con una comprobación adecuada) también impone ciertas expectativas en los accesos directos: las teclas modificadoras deben ser las primeras, solo una clave imprimible por atajo. – eyelidlessness

4

JimmyP ha publicado esto como un comentario, pero merece ser una respuesta para fines de votación.

http://www.openjs.com/scripts/events/keyboard_shortcuts/

+0

Lo sé, es por eso que le pregunté por qué no lo había publicado como respuesta. Upvoted. –

+1

Lo sé, es por eso que lo publiqué como una respuesta. ;) Y lo publiqué en la wiki de la comunidad porque no es mi objetivo ganar. – eyelidlessness

2

Hay también nueva biblioteca de JavaScript llamada jwerty, es fácil de usar y no se basa en jQuery.

+0

gracias awoodland;) –

Cuestiones relacionadas