0

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

可以做这样的事情吗?

4

3 回答 3

1

并不真地。

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

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

于 2013-11-07T14:50:25.777 回答
1

不,这实际上是不可能的(至少对于您的代码而言不是),也没有多大意义。keydown每当按下某个键时都会触发 该事件。

无论您是手动检查它是否是 enter 键,还是浏览器或 jQuery 是否在内部执行它都不是非常相关 - 无论浏览器需要在任何时候检查按下哪个键来测试它是否是回车键。

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

于 2013-11-07T14:52:18.137 回答
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);
  })
);

这样,您的回调函数只会在按下的键是回车时被调用。

于 2013-11-07T14:52:59.923 回答