2011-10-12 8 views

答えて

5

あなたがイベントをトリガしたい場合、それはこのようなものでなければなりません:

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

しかし、うまくいかないようです。私はこれに費やす時間はもうありませんが、これはセキュリティ問題のようなものです。 MSDNW3CMDNにこれらのドキュメントが表示され、実際の方法があるかどうかがわかります。私はWYSIWYGテキストエリアのための古典的なアンドゥ&リドゥボタンを作成する方法を知りたいのですが、より良い説明のための

+0

thx問題ない男! ;) – sbaaaang

+3

このコードはすべて動作しませんか?ポイントは何ですか。 –

+0

@azizpunjani申し訳ありません、あなたの無料コードソースは今回は動作しませんでした。多分あなたは文書を読む必要があります! – Mohsen

9

e.whichは、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

は、あなたも、このコードをテストしましたか?これは動作していません – Mohsen

+0

フィドルhttp://jsfiddle.net/pZgB2/1/ –

+0

あなたの編集を見ました。それは今良いです。まだctrl + shift + zはCtrl + Zを起動します。これは修正されています:http://jsfiddle.net/pZgB2/2/ – Mohsen

3

CtrlキーとShiftキーはキーイベントに含まれていますが、キーコードはキーを押すキーを参照しています。 CtrlキーとShiftキーはコントロールキーで、キーイベントには独自のキーがあります。あなたはCtrl+Shift+Z、その後のKeyDownイベントを押すと、例えば、

はこれを次のようになります。

{ 
    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 
} 

あなたがZを押しながらこれらのキーが押されたため、該当するCtrlShiftキー用の2つのキーがある見ることができるように。

だから、このように、このイベントを検出することができます。

document.addEventListener('keydown', function(event){ 
    if(event.keyCode == 90 && event.ctrlKey && event.shiftKey){ 
    // do your stuff 
    } 
}, false); 

注:あなたは、複数のキーのキーボードショートカットのため​​に耳を傾ける必要があります。 keyupは機能しません。

関連する問題