¿Hay alguna forma de que jQuery detecte que se presionó más de una tecla al mismo tiempo?
¿Existe alguna alternativa que permita que se detecte la pulsación de dos teclas a la vez?
Para detectar varias teclas que se mantienen presionadas, use los eventos keydown y keyup .
var keys = {}; $(document).keydown(function (e) { keys[e.which] = true; }); $(document).keyup(function (e) { delete keys[e.which]; });He creado una demostración aquí: http://jsfiddle.net/gFcuU/ . Es un poco divertido, aunque noté que mi teclado solo puede detectar un máximo de 6 teclas.
Depende. Para las teclas "normales", eso significa Non- Shift , Ctrl , ALT , ( CMD ), la respuesta es no, el controlador de eventos se activará en una cola, uno tras otro.
Para las teclas modificadoras que mencioné anteriormente, hay una propiedad en el objeto de evento.
Ejemplo:
$(document).bind('keypress', function(event) { if( event.which === 65 && event.shiftKey ) { alert('you pressed SHIFT+A'); } });Otras propiedades son:
event.ctrlKeyevent.altKeyevent.metaKeySi solo desea activar un controlador cuando se presionan varias teclas en serie, intente algo como:
jQuery.multipress = function (keys, handler) { 'use strict'; if (keys.length === 0) { return; } var down = {}; jQuery(document).keydown(function (event) { down[event.keyCode] = true; }).keyup(function (event) { // Copy keys array, build array of pressed keys var remaining = keys.slice(0), pressed = Object.keys(down).map(function (num) { return parseInt(num, 10); }), indexOfKey; // Remove pressedKeys from remainingKeys jQuery.each(pressed, function (i, key) { if (down[key] === true) { down[key] = false; indexOfKey = remaining.indexOf(key); if (indexOfKey > -1) { remaining.splice(indexOfKey, 1); } } }); // If we hit all the keys, fire off handler if (remaining.length === 0) { handler(event); } }); };Por ejemplo, para disparar en st,
jQuery.multipress([83, 84], function () { alert('You pressed s-t'); })