2012-11-15 51 views
1

我正在尝试在jQuery中将热键放入我的web应用程序中。我试图绑定Ctrl + U键击。这里是我有:在jQuery中绑定ctrl + u击键

$(document).keypress(function(e) { 
    if(e.ctrlKey && e.which == 117) { 
     if($("#nav-user-details").length > 0) { 
     $("#nav-user-details").find(".dropdown-menu").toggle(); 
     } 
    } 
}); 

虽然这不工作。我如何绑定这个按键?

谢谢。

回答

0

您将不得不使用keydown而不是按键。按键不会触发非字符键。

$(document).keydown(function (e) { 
    if (e.ctrlKey && e.which === 81) { 
    alert("key pressed"); 
    return false; 
    } 
}); 
+0

所以这是行不通的,'e.which'总是'ctrl'的值。 – Justin

+0

我试过在铬。它在那里工作。 使用我使用的确切代码进行编辑。 – Eric

0
$(document).keypress("u",function(e) { 
    if(e.ctrlKey) 
    alert("Ctrl+U was pressed!!"); 
}); 
+0

所以这个工作,但只有当他们先按'ctrl',然后'u'。有没有办法让它工作? – Justin

+0

当你按下ctrl + *任意键时,这仍然会发出警报* – Jamiec

+0

这不是'keypress'的工作方式:http://api.jquery.com/keypress/ – David

3

试试这个请http://jsfiddle.net/TN7GZ/

按下Ctrl键+ü屏幕会提醒。

这将满足您的需要:)

代码

var isCtrl = false; 
document.onkeyup=function(e){ 
    if(e.which == 17) isCtrl=false; 
} 
document.onkeydown=function(e){ 
    if(e.which == 17) isCtrl=true; 
    if(e.which == 85 && isCtrl == true) { 
     //run code for CTRL+U -- ie, whatever! 
     alert('CTRL + U stuff'); 
     return false; 
    } 
} 
​ 
+0

感谢您使用此代码片段,它可能会提供一些立即帮帮我。通过展示*为什么*这是一个很好的解决方案,对未来的读者会有更好的解决方案,这将为它的教育价值提供一个合适的解释[//大大提高](// meta.stackexchange.com/q/114762)但不完全相同的问题。请编辑您的答案以添加解释,并指出适用的限制和假设。 –

0

试试这个:

var prevKey = null; 
$(document).keydown(function (e) { 
    var thisKey = e.which; 

    if (prevKey && prevKey == 17) { 
    if (thisKey == 85) { 
     // Your code. 
    } 
    } 

    prevKey = thisKey; 
}); 
+0

感谢您使用此代码段,它可能会提供一些即时帮助。通过展示*为什么*这是一个很好的解决方案,对未来的读者会有更好的解决方案,这将为它的教育价值提供一个合适的解释[//大大提高](// meta.stackexchange.com/q/114762)但不完全相同的问题。请编辑您的答案以添加解释,并指出适用的限制和假设。 –

1

我敢肯定85u的键码,还是我失去了什么?

如果你想要mac支持(命令键),它可能会变得混乱。我写了一个段之前,可能会帮助你,但它涉及到浏览器检测(呸):

var cmd = false; 

$(document).on('keydown', function(e) { 

    if(detectMacCommand(e.which)) { 
     cmd = true; 
     return; 
    } 

    // now detect print (ctr/cmd + p) 
    if (e.which == 85 && (e.ctrl || cmd)) { 
     e.preventDefault(); 
     alert('ctrl/cmd + u'); 
    } 

}).on('keyup', function(e) { 

    if(detectMacCommand(e.which)) { 
     cmd = false; 
     return; 
    } 

}); 

function detectMacCommand(key) { 
    return ($.browser.mozilla && key == 224 || 
      $.browser.opera && key == 17 || 
      $.browser.webkit && (key == 91 || key == 93)); 
} 

演示:http://jsbin.com/afijam/2

0

如果你在一个Xhtml文件中工作,你会得到一个错误The entity must immediately follow the &那么你应该使用&&&而不是&&

+1

虽然这可能是解决问题的有价值的提示,但一个好的答案也可以证明解决方案。请[编辑]提供示例代码来展示你的意思。或者,可以考虑将其写为注释。 –