在下面的代码中,有没有一种方法可以在e.which === 13中使用keydown,而不是在keydown上使用?这是每次按下按键时都不必检查,只有在按下回车时才会起作用。
当前代码
$('.search').on('keydown', function(e) {
if(e.which === 13) {
// enter key pressed
var value = this.value; // this is the inputs value
console.log(value);
}
});
我希望做什么(伪代码)
$('.search').(when key === 13 is pressed) { // Only if the enter key pressed
// enter key pressed
var value = this.value; // this is the inputs value
console.log(value);
}
});
可以这样做吗?
答案 0 :(得分:1)
不是。
您可以做的最好的事情是捕获事件(您正在使用on
但它可能是任何其他事件捕获方法)。有许多不同类型的事件(鼠标事件,键盘事件,控件特定事件等),您必须查看事件,因为每个事件类型将具有不同的属性。
对于按键,有一些可用于捕获的事件,例如keypress
,keydown
和keyup
。你不能指望一个特定的密钥会自己拥有一个事件,因为你需要保存一行代码。
答案 1 :(得分:1)
不,这实际上是不可能的(至少不是出于代码的目的),也没有多大意义。只要按下某个键,就会触发keydown
事件。
无论您是手动检查是否是输入键,或者浏览器或jQuery是否在内部进行操作都不是非常相关 - 无论浏览器是否需要检查按下哪个键,只要按下任何键进行测试是否是回车键。
基本上你在浪费你的时间。尝试这样做不会有任何可衡量的性能优化。无论您如何尝试检测按下的回车键,无论按下哪个键,都会对每个keydown
或keypress
事件进行测试。
答案 2 :(得分:1)
您可以使用高阶函数为您提取逻辑:
function onlyOnEnter(fn) {
return function(e) {
if(e.which === 13) {
fn.apply(this, arguments);
}
}
}
用法:
$('.search').on('keydown', onlyOnEnter(function(e) {
var value = this.value; // this is the inputs value
console.log(value);
})
);
这样,只有当按下的键是输入时才会调用你的回调函数。