【发布时间】:2015-06-05 15:56:58
【问题描述】:
有没有办法在 jquery(或 javascript)中捕获组合键 ctrl+x+return,这样如果用户按下这个组合键,调用一个函数。我尝试使用 jquery 热键插件,但没有奏效。
【问题讨论】:
标签: javascript jquery
有没有办法在 jquery(或 javascript)中捕获组合键 ctrl+x+return,这样如果用户按下这个组合键,调用一个函数。我尝试使用 jquery 热键插件,但没有奏效。
【问题讨论】:
标签: javascript jquery
您可能会发现使用KeyboardJS 是一个更好的解决方案。它的大坝使用简单。这里是docs;
KeyboardJS.on('ctrl + x + enter', function() {
//do stuff on press
}, function() {
//do stuff on release
});
另外,如果你想在 x 或 enter 之前强制按 ctrl,你可以这样做
KeyboardJS.on('ctrl > x + enter', function() {
//do stuff on press
}, function() {
//do stuff on release
});
【讨论】:
可以使用按键事件对象的ctrlKey属性
$(document).keypress(function(e) {
if(e.ctrlKey) {
// do code to test other keys
}
});
同样shift,alt保留键有属性,但是enter键有keyCode 13。
有什么理由你不能尝试不同的组合 - 例如。 ctrl-alt-x? Enter 键通常保留用于触发网页上的表单提交和其他事件。
【讨论】:
使用全局布尔数组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中对应的值为true,然后执行一个测试,给定的keyValues当前是否为true。请注意,您不能删除 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]) 为 ctrl+x+enter 添加热键:
addGlobalHotkey(function(){
document.body.appendChild(
document.createElement('div').appendChild(
document.createTextNode('Ctrl + x + Enter down')
).parentNode);
},[88,13,17]);
您可以使用全局 [[callback1,values1],[callback2,values2],...] 数组,而不是为每个热键添加侦听器。
重要提示:在 IE 之前的版本 9 中,您必须使用 attachEvent 而不是 addEventListener。由于您已经在使用 jQuery,您可以改用 .on(...) 或 .keydown。
【讨论】:
$("body").bind("keydown",keyDown);
function keyDown(e){
if((e.ctrlKey)&&(e.keyCode == 88)&&(e.keyCode == 13)){
alert("Keys down are Ctrl + x + Return");
}
}
【讨论】:
只需像这样输入:
document.getElementById('yourelementid').onkeydown = function(){
if(event.ctrlKey===true && event.keyCode==88){
//your code goes here
}
}
//no depedency needs. pretty straight-forward
【讨论】: