Nuestro grupo de trabajo ha pasado mucho tiempo buscando para darle soluciones a tu pregunta, te regalamos la respuestas de modo que esperamos servirte de gran apoyo.
Solución:
Usar e.which
que ha sido normalizado entre navegadores por jquery.
$(document).keydown(function(e)
if( e.which === 90 && e.ctrlKey && e.shiftKey )
console.log('control + shift + z');
else if( e.which === 90 && e.ctrlKey )
console.log('control + z');
);
Si desea activar el evento, entonces debería ser algo como esto:
HTML
JavaScript
var t = document.getElementById('t'), //textarea
bcsz = document.getElementById('bcsz'), //button ctrl shift z
bsz = document.getElementById('bcz'), // button ctrl z
csz = document.createEvent('KeyboardEvents'), //ctrl shift z event
cz = document.createEvent('KeyboardEvents'); // ctrl z event
csz.initKeyboardEvent(
'keydown',
true, // key down events bubble
true, // and they can be cancelled
document.defaultView, // Use the default view
true, // ctrl
false, // alt
true, //shift
false, //meta key
90, // keycode
0
);
cz.initKeyboardEvent(
'keydown',
true, // key down events bubble
true, // and they can be cancelled
document.defaultView, // Use the default view
true, // ctrl
false, // alt
false, //shift
false, //meta key
90, // keycode
0
);
bcz.addEventListener('click', function()
t.dispatchEvent(cz);
, false);
bcsz.addEventListener('click', function()
t.dispatchEvent(csz);
, false);
MIRA EL ENLACE JSBIN
Pero parece que no funciona. No tengo más tiempo para gastar en esto, pero sí, es un problema de seguridad. Vería estos documentos en MSDN, W3C y MDN para ver si hay una forma real de hacerlo.
Ctrl y Mayús keys están incluidos en key eventos, pero el código clave se refiere a qué key tu presionas Ctrl y Shift son control keys y tienen los suyos keys en key eventos.
Por ejemplo, si presiona Ctrl+Shift+Z
entonces el evento keydown sería este:
altGraphKey: false
altKey: false
bubbles: true
cancelBubble: false
cancelable: true
charCode: 0
clipboardData: undefined
ctrlKey: true
currentTarget: null
defaultPrevented: true
detail: 0
eventPhase: 0
keyCode: 90
keyIdentifier: "U+004C"
keyLocation: 0
layerX: 0
layerY: 0
metaKey: false
pageX: 0
pageY: 0
returnValue: false
shiftKey: true
srcElement: HTMLTextAreaElement
target: HTMLTextAreaElement
timeStamp: 1318460678544
type: "keydown"
view: DOMWindow
which: 90
__proto__: KeyboardEvent
Como puedes ver hay dos key por Ctrl
y Shift
keys que son true porque esos keys fueron presionados mientras presionaban Z
.
Entonces puedes detectar este evento así:
document.addEventListener('keydown', function(event)
if(event.keyCode == 90 && event.ctrlKey && event.shiftKey)
// do your stuff
, false);
Nota: Debes escuchar keydown
para múltiples key atajos de teclado. keyup
no funcionaría
Acuérdate de que tienes la opción de comentar si diste con la contestación.