Cómo capturar la pulsación de tecla, por ejemplo, Ctrl + Z, sin colocar un elemento de entrada en la página en JavaScript? Parece que en IE, los eventos de keypress y keyup solo pueden vincularse a los elementos de entrada (cuadros de entrada, áreas de texto, etc.)Capturar presionar la tecla sin colocar un elemento de entrada en la página?
Respuesta
jQuery también tiene una excelente aplicación que es increíblemente fácil de usar. He aquí cómo se podría implementar esta funcionalidad en todos los navegadores:
$(document).keypress(function(e){
var checkWebkitandIE=(e.which==26 ? 1 : 0);
var checkMoz=(e.which==122 && e.ctrlKey ? 1 : 0);
if (checkWebkitandIE || checkMoz) $("body").append("<p>ctrl+z detected!</p>");
});
Probado en IE7, Firefox 3.6.3 & Chrome 4.1.249.1064
Otra forma de hacer esto es usar el evento KeyDown y realizar un seguimiento del evento. clave. Sin embargo, puesto jQuery normaliza keyCode y charCode usando event.which, su spec recomienda el uso de event.which en una variedad de situaciones:
$(document).keydown(function(e){
if (e.keyCode==90 && e.ctrlKey)
$("body").append("<p>ctrl+z detected!</p>");
});
no sabía e.which puede capturar la pulsación de teclas, así como el clic del ratón! ¿Y podría decirme cómo obtener el código clave 26? – powerboy
keycode 26 es una identificación específica para "que" configurada por un evento de pulsación de tecla (indica CTRL + z). Para ver más asignaciones de caracteres para el evento de pulsación de teclas, consulte [los documentos de jQuery] (http://api.jquery.com/keypress/) o [probador de eventos clave de unixpapa] (http://unixpapa.com/js /testkey.html) – Trafalmadorian
Thx. Sé cuál es el significado de keycode. Quiero decir, 17 es para Ctrl, 90 es para Z, ¿cómo obtuviste el número 26? Solo busqué en Google pero no pude encontrar la respuesta. – powerboy
document.onkeydown = keyDown;
document.onkeypress = keyPress;
etc.
funciona para mí en IE
¿Has probado IE6 y probado las teclas de flecha? – powerboy
No explica qué son 'keyDown' y' keyPress'. Esto arrojará un error. –
Código & detecta ctrl + z
document.onkeyup = function(e) {
if(e.ctrlKey && e.keyCode == 90) {
// ctrl+z pressed
}
}
Para las claves no imprimibles, tales como teclas de flecha y teclas de acceso directo, tales como Ctrl-z , Ctrl-x, Ctrl-c que pueden desencadenar alguna acción en el navegador (por ejemplo, dentro de documentos o elementos editables), es posible que no obtenga un evento de pulsación de tecla en todos los navegadores. Por este motivo, debe utilizar keydown
en su lugar, si le interesa suprimir la acción predeterminada del navegador. De lo contrario, keyup
funcionará igual de bien.
Colocación de un evento keydown
a document
obras en todos los principales navegadores:
document.onkeydown = function(evt) {
evt = evt || window.event;
if (evt.ctrlKey && evt.keyCode == 90) {
alert("Ctrl-Z");
}
};
Para una referencia completa, recomiendo fuertemente Jan Wolter's article on JavaScript key handling.
Detectar pulsación de tecla, incluyendo combinaciones de teclas:
window.addEventListener('keydown', function (e) {
if (e.ctrlKey && e.keyCode == 90) {
// Ctrl + z pressed
}
});
ventaja aquí es que son no sobrescribir propiedades globales, sino que simplemente introduciendo un efecto secundario. No es bueno, pero definitivamente es mucho menos nefasto que otras sugerencias aquí.
Para JS moderno, use event.key
!
document.addEventListener("keypress", function onPress(event) {
if (event.key === "z" && event.ctrlKey) {
// Do something awesome
}
});
- 1. Capturar presionar la tecla presionar en el campo de entrada de texto en AS3
- 2. Cómo capturar la tecla borrar presionar C#?
- 3. Capturar la tecla Atrás presionar en PhoneGap para Android
- 4. Capturar la tecla de retroceso presionar en BlackBerry con jQueryMobile
- 5. ¿Hay alguna manera de obtener la entrada del usuario sin presionar la tecla enter?
- 6. jqGrid Filtro DatePicker sin presionar la tecla Entrar
- 7. Entradas en SDL (al presionar la tecla)
- 8. eliminar la tecla presionar demora en javascript
- 9. Presionar mediante programación la tecla "Izquierda" en una entrada de texto
- 10. Capturar una tecla Intro presionada en cualquier lugar de la página
- 11. ¿Por qué formularios con solo campo de entrada se someten al presionar la tecla enter en la entrada
- 12. Cómo capturar la entrada HID sin procesar en Linux?
- 13. Simular presionar la tecla de tabulación con jQuery
- 14. ¿Cómo cerrar un formulario al presionar la tecla de escape?
- 15. jQuery: cómo capturar la tecla presionando live()
- 16. Cómo capturar la tecla Entrar, presione GtkEntry
- 17. obtener modifierFlags en evento KeyDown sin presionar la tecla sin modificar junto con él!
- 18. desactivar la tecla de entrada en la página, pero no en área de texto
- 19. Comportamiento de selección múltiple jqGrid al presionar la tecla especial
- 20. Seleccionar el elemento ListBox solo al hacer clic o presionar la tecla en Silverlight
- 21. jQuery código desencadenado dos veces para bind ('cambio de tecla') al presionar la tecla
- 22. Java: Registrar <ENTER> presionar la tecla en JTextPane
- 23. Al presionar 'enter' en un tipo de entrada = "texto", ¿cómo?
- 24. No hay entrada para la tecla Equals en System.Windows.Input.Key enum?
- 25. Capturar entrada en Linux
- 26. entrada en el foco o la tecla de tabulación presionada, mover al centro de la pantalla
- 27. Capturar varias pulsaciones de tecla en C#
- 28. ¿Cómo diferenciar entre presionar una tecla larga y presionar una tecla con regularidad?
- 29. Asignación de la tecla principal para ejecutar algo sin tener que presionar enter
- 30. No se puede capturar la tecla Entrar en el cuadro de texto de WinForms
que no es necesario hacerlo. – muhmuhten
¿Por qué no ......? –
@Tim: Porque no sería convencional realizar acciones cuando se presionan esos teclacomandos cuando un elemento de la GUI no está enfocado, lo que infringe el Principio de la menor sorpresa. –