如何在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 });
您可以使用按键事件对象的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