有没有办法在jquery(或javascript)中捕获组合键 ctrl + x + return ,这样如果用户按此键组合键,调用一个函数。我尝试使用jquery hotkeys插件,但是没有用。
答案 0 :(得分:5)
您可能会发现使用KeyboardJS是更好的解决方案。它的大坝简单易用。这是docs;
KeyboardJS.on('ctrl + x + enter', function() {
//do stuff on press
}, function() {
//do stuff on release
});
另外,如果你想强制在x之前按ctrl或输入你可以改为
KeyboardJS.on('ctrl > x + enter', function() {
//do stuff on press
}, function() {
//do stuff on release
});
答案 1 :(得分:3)
您可以使用按键事件对象的ctrlKey属性
$(document).keypress(function(e) {
if(e.ctrlKey) {
// do code to test other keys
}
});
同样shift,alt保留键具有属性,但enter键具有keyCode 13。
有什么理由你不能尝试不同的组合 - 例如CTRL-ALT-X? Enter键通常保留用于触发网页上的表单提交和其他事件。
答案 2 :(得分:3)
使用全局布尔数组var keys = []
检查是否按下了某个键。然后使用以下函数添加全局热键:
window.addGlobalHotkey = function(callback,keyValues){
if(typeof keyValues === "number")
keyValues = [keyValues];
var fnc = function(cb,val){
return function(e){
keys[e.keyCode] = true;
executeHotkeyTest(cb,val);
};
}(callback,keyValues);
window.addEventListener('keydown',fnc);
return fnc;
};
正如您所看到的,它为'keydown'
事件添加了一个新的侦听器。该侦听器将首先在keys
中设置相应的值,然后执行测试,无论给定的keyValues
当前是否为真。请注意,您无法删除keys[e.keyCode] = true
并将其放在另一个侦听器中,因为这可能会导致错误的回调顺序(首先是热键测试,然后是键映射)。 executeHotkeyTest
本身也很容易:
window.executeHotkeyTest = function(callback,keyValues){
var allKeysValid = true;
for(var i = 0; i < keyValues.length; ++i)
allKeysValid = allKeysValid && keys[keyValues[i]];
if(allKeysValid)
callback();
};
最后,您必须向keyup
添加另一个侦听器,以清除keys
中已发布的密钥。
window.addEventListener('keyup',function(e){
keys[e.keyCode] = false;
});
现在,您可以使用addGlobalHotkey(callback,[13,17,88])
:
addGlobalHotkey(function(){
document.body.appendChild(
document.createElement('div').appendChild(
document.createTextNode('Ctrl + x + Enter down')
).parentNode);
},[88,13,17]);
<强> JSFiddle demo 强>
您可以使用全局[[callback1,values1],[callback2,values2],...]
数组,而不是为每个热键添加侦听器。
重要提示:在IE早期版本9中,您必须使用attachEvent
而不是addEventListener
。由于您已经在使用jQuery,因此可以使用.on(...)
或.keydown
。
答案 3 :(得分:2)
$("body").bind("keydown",keyDown);
function keyDown(e){
if((e.ctrlKey)&&(e.keyCode == 88)&&(e.keyCode == 13)){
alert("Keys down are Ctrl + x + Return");
}
}
答案 4 :(得分:1)
只需输入如下:
document.getElementById('yourelementid').onkeydown = function(){
if(event.ctrlKey===true && event.keyCode==88){
//your code goes here
}
}
//no depedency needs. pretty straight-forward