2011-10-12 37 views

Trả lời

5

Nếu bạn muốn kích hoạt sự kiện này sau đó nó nên được một cái gì đó như thế này:

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

Nhưng có vẻ như nó không hoạt động. Tôi không có nhiều thời gian để chi tiêu cho điều này, nhưng vâng đây là một vấn đề an ninh. Tôi sẽ thấy các tài liệu này tại số MSDN, W3CMDN để xem liệu có cách thực sự để thực hiện việc này hay không.

+0

thx không có vấn đề gì! ;) – sbaaaang

+3

vì vậy tất cả các mã này và nó không hoạt động? Vấn đề ở đây là gì. –

+0

@azizpunjani oh xin lỗi mã nguồn miễn phí của bạn không hoạt động lần này. Có thể bạn cần đọc tài liệu! – Mohsen

9

Sử dụng e.which đã được trình duyệt chéo bình thường hóa bằng 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

Thậm chí bạn có kiểm tra mã này không? Điều này không hoạt động – Mohsen

+0

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

+0

Tôi đã xem bản chỉnh sửa của bạn. Bây giờ nó ổn rồi. Vẫn ctrl + shift + z cháy ctrl + z. Điều này được sửa chữa: http://jsfiddle.net/pZgB2/2/ – Mohsen

3

Phím Ctrl và Shift được bao gồm trong các sự kiện quan trọng nhưng mã phím là trọng tài cho phím bạn nhấn. Ctrl và Shift là các phím điều khiển và chúng có khóa riêng trong các sự kiện quan trọng.

Ví dụ, nếu bạn nhấn Ctrl+Shift+Z sự kiện sau đó KeyDown sẽ là:

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

Như bạn có thể thấy có hai chìa khóa cho CtrlShift phím đó là đúng bởi vì những phím được nhấn trong khi bấm Z.

Vì vậy, bạn có thể phát hiện sự kiện này như sau:

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

Lưu ý: Bạn nên lắng nghe keydown cho nhiều phím tắt quan trọng. keyup sẽ không hoạt động.

Các vấn đề liên quan