Mi chiedevo come attivare l'evento keyCode composto da Ctrl+z
e il codice di accesso all'evento composto da Ctrl+Shift+z
?jQuery Trigger keyCode Ctrl + Shift + z e Ctrl + z in wysiwyg textarea
risposta
Se si desidera attivare l'evento, allora dovrebbe essere qualcosa di simile:
HTML
<!DOCTYPE html>
<html>
<head>
</head>
<body>
<input type=button value=CTRL+SHIFT+Z id=bcsz />
<input type=button value=CTRL+Z id=bcz />
<textarea id=t ></textarea>
</body>
</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);
Ma sembra che non funzioni. Non ho più tempo da dedicare a questo, ma si tratta di una sorta di problema di sicurezza. Vorrei vedere questi documenti a MSDN, W3C e MDN per vedere se c'è un modo reale per farlo.
Utilizzare e.which
che è stato normalizzato cross browser da 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');
}
});
I tasti CTRL e MAIUSC sono inclusi in eventi chiave ma il codice chiave è arbitrario per il tasto premuto. Ctrl e Shift sono tasti di controllo e hanno le proprie chiavi in eventi chiave.
Per esempio, se si preme Ctrl+Shift+Z
evento, allora keydown sarebbe questo:
{
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
}
Come potete vedere ci sono due chiave per Ctrl
e Shift
chiavi che sono vere, perché questi tasti sono stati premuti mentre si preme Z
.
in modo da poter rilevare questo evento come questo:
document.addEventListener('keydown', function(event){
if(event.keyCode == 90 && event.ctrlKey && event.shiftKey){
// do your stuff
}
}, false);
Nota: Si dovrebbe ascoltare keydown
per molteplici scorciatoie da tastiera tasto. keyup
non funzionerebbe.
per una migliore spiegazione mi piacerebbe sapere come creare i classici pulsanti Annulla e Ripristina per una textarea wysiwyg ... la migliore pratica – sbaaaang