如何在jquery中绑定组合键ctrl + x + return

有没有办法在jquery(或javascript)中捕获键组合ctrl + x + return ,这样如果用户按下这个组合键,就会调用一个函数。 我尝试使用jquery hotkeys插件,但是没有用。

使用全局布尔数组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清除已释放的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]); 

JSFiddle演示

您可以使用全局[[callback1,values1],[callback2,values2],...]数组[[callback1,values1],[callback2,values2],...]而不是为每个热键添加侦听器。

重要说明 :在IE早期版本9中,您必须使用attachEvent而不是addEventListener 。 由于您已经在使用jQuery,因此可以使用.on(...).keydown

您可能会发现使用KeyboardJS是一个更好的解决方案。 它的大坝简单易用。 这是文档 ;

 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 }); 

http://robertwhurst.github.com/KeyboardJS/

您可以使用按键事件对象的ctrlKey属性

 $(document).keypress(function(e) { if(e.ctrlKey) { // do code to test other keys } }); 

同样,shift,alt保留键具有属性,但是enter键具有keyCode 13。

有什么理由你不能尝试不同的组合 – 例如ctrl-alt-x? Enter键通常保留用于触发网页上的表单提交和其他事件。

 $("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