2011-10-12 7 views

risposta

5

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); 

LOOK AT JSBIN LINK

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.

+0

thx nessun problema uomo! ;) – sbaaaang

+3

quindi tutto questo codice e non funziona? Qual e il punto. –

+0

@azizpunjani oh scusate la vostra fonte di codice libero non ha funzionato questa volta. Forse hai bisogno di leggere i documenti! – Mohsen

9

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'); 
     }   
}); 
+0

Hai mai provato questo codice? Questo non funziona – Mohsen

+0

Fiddle http://jsfiddle.net/pZgB2/1/ –

+0

Ho visto la tua modifica. Va bene ora. Ancora ctrl + mai + z attiva ctrl + z. Questa è la soluzione: http://jsfiddle.net/pZgB2/2/ – Mohsen

3

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.