tôi đã tự hỏi làm cách nào để kích hoạt mã khóa sự kiện được tạo bởi Ctrl+z
và mã khóa sự kiện được sáng tác bởi Ctrl+Shift+z
?Phím tắt kích hoạt jQuery Ctrl + Shift + z & Ctrl + z trong wysiwyg textarea
Trả lời
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);
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, W3C và MDN để xem liệu có cách thực sự để thực hiện việc này hay không.
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');
}
});
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 Ctrl
và Shift
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ó giải thích tốt hơn, tôi muốn biết cách tạo các nút Hoàn tác & Làm lại cổ điển cho văn bản wysiwyg ... thực hành tốt nhất – sbaaaang