jQuery:避免检查按下的键是否每次都“输入”

时间:2013-11-07 14:48:20

标签: javascript jquery

在下面的代码中,有没有一种方法可以在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);
    }
});

可以这样做吗?

3 个答案:

答案 0 :(得分:1)

不是。

您可以做的最好的事情是捕获事件(您正在使用on但它可能是任何其他事件捕获方法)。有许多不同类型的事件(鼠标事件,键盘事件,控件特定事件等),您必须查看事件,因为每个事件类型将具有不同的属性。

对于按键,有一些可用于捕获的事件,例如keypresskeydownkeyup。你不能指望一个特定的密钥会自己拥有一个事件,因为你需要保存一行代码。

答案 1 :(得分:1)

不,这实际上是不可能的(至少不是出于代码的目的),也没有多大意义。只要按下某个键,就会触发keydown事件。

无论您是手动检查是否是输入键,或者浏览器或jQuery是否在内部进行操作都不是非常相关 - 无论浏览器是否需要检查按下哪个键,只要按下任何键进行测试是否是回车键。

基本上你在浪费你的时间。尝试这样做不会有任何可衡量的性能优化。无论您如何尝试检测按下的回车键,无论按下哪个键,都会对每个keydownkeypress事件进行测试。

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

这样,只有当按下的键是输入时才会调用你的回调函数。