繁体   English   中英

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

[英]jQuery: avoid checking if the key pressed is 'enter' everytime

在下面的代码中,有没有一种方法可以在keydown所在的e。哪个=== 13上使用,而不是在keydown上使用? 这是因为每次按下键时都不必检查,并且仅在按下Enter键时才起作用。

当前代码

$('.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);
    }
});

可以这样做吗?

并不是的。

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

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

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

是否手动检查是否是回车键,或者浏览器或jQuery是否在内部进行都无关紧要-不管浏览器何时需要在按下任何键以测试是否按下时都需要检查按下了哪个键。回车键。

本质上,您是在浪费时间。 尝试执行此操作不会有任何可衡量的性能优化。 无论你如何试图检测键被按下Enter键,它会为每一个被测试keydownkeypress事件,无论哪个键按下的。

您可以使用高阶函数为您提取该逻辑:

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

这样,只有在按下回车键时才会调用回调函数。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM