使用jQuery,我如何找到哪个键被按下时,我绑定到按键事件?
$('#searchbox input').bind('keypress', function(e) {});
我想在按下ENTER键时触发提交。
(更新)
尽管我自己找到了(或者更好的:一个)答案,但似乎还有变化的空间;)
keyCode和它之间有区别吗?特别是如果我只找ENTER,它永远不会是unicode键?
是否有些浏览器提供一种属性,而其他浏览器提供另一种?
使用jQuery,我如何找到哪个键被按下时,我绑定到按键事件?
$('#searchbox input').bind('keypress', function(e) {});
我想在按下ENTER键时触发提交。
(更新)
尽管我自己找到了(或者更好的:一个)答案,但似乎还有变化的空间;)
keyCode和它之间有区别吗?特别是如果我只找ENTER,它永远不会是unicode键?
是否有些浏览器提供一种属性,而其他浏览器提供另一种?
当前回答
使用事件。关键和现代JS!
再也没有数字代码了。你可以直接检查钥匙。例如“Enter”、“LeftArrow”、“r”或“r”。
const input = document.getElementById("searchbox");
input.addEventListener("keypress", function onEvent(event) {
if (event.key === "Enter") {
// Submit
}
else if (event.key === "Q") {
// Play quacking duck sound, maybe...
}
});
Mozilla文档
支持的浏览器
其他回答
鉴于您正在使用jQuery,您绝对应该使用.which。是的,不同的浏览器设置不同的属性,但jQuery会对它们进行规范化,并在每种情况下设置.which值。参见http://api.jquery.com/keydown/上的文档,它说明:
要确定按下了哪个键,可以检查传递给处理程序函数的事件对象。虽然浏览器使用不同的属性来存储这些信息,但jQuery规范化了.which属性,因此我们可以可靠地使用它来检索键代码。
如果你正在使用jQuery UI,你有翻译的公共键代码。在ui / ui / ui.core.js:
$.ui.keyCode = {
...
ENTER: 13,
...
};
在tests/simulate/jquery. simulation . JS中也有一些翻译,但我在核心JS库中找不到任何翻译。注意,我只是核对了一下资料。也许有其他方法可以摆脱这些神奇的数字。
你也可以使用String。charCodeAt和。fromcharcode:
>>> String.charCodeAt('\r') == 13
true
>>> String.fromCharCode(13) == '\r'
true
有些浏览器使用keyCode,有些使用which。如果你正在使用jQuery,你可以可靠地使用它,因为jQuery标准化了东西。实际上,
$('#searchbox input').bind('keypress', function(e) {
if(e.keyCode==13){
}
});
编辑:这只适用于IE…
我知道这是一个旧帖子,但有人可能会发现这很有用。
键事件是映射的,所以除了使用keycode值,还可以使用key值使其更具可读性。
$(document).ready( function() {
$('#searchbox input').keydown(function(e)
{
setTimeout(function ()
{
//rather than using keyup, you can use keydown to capture
//the input as it's being typed.
//You may need to use a timeout in order to allow the input to be updated
}, 5);
});
if(e.key == "Enter")
{
//Enter key was pressed, do stuff
}else if(e.key == "Spacebar")
{
//Spacebar was pressed, do stuff
}
});
这里是一个小抄与映射键,我从这个博客
检查优秀的jquery。热键插件,支持键组合:
$(document).bind('keydown', 'ctrl+c', fn);