如何使用JS或jQuery完全检测不可见的键(ENTER,F1,SHIFT)?

Roh*_*mar 7 javascript jquery

首先抱歉,我不知道该叫什么键(ENTER,F1,HOME等).

实际上,我正在创建一个输入搜索框,其中onkeyup调用一个函数.当用户输入至少两个键时,我的函数被调用,并且使用AJAX显示相关的搜索结果.问题是当用户按下箭头键,HOME,END等时,我的ajax也被调用,我不想要.并且当关注输入时按F5键重新加载页面不会重新加载页面,而是调用AJAX,这就是为什么它对我来说是个大问题.

$('input[name=\'search\']').on(keyup, function(e) {
  if ($('input[name=\'search\']').val().length >= 2) {
    // call ajax to display results..
  }
});
Run Code Online (Sandbox Code Playgroud)

我想在其中添加一个额外的表达式if,用于检查是否按下了不可见的键.喜欢 -

if ($('input[name=\'search\']').val().length >= 2 && (EXPRESSION FOR VISIBLE KEYS)) {
  // call ajax to display results..
}
Run Code Online (Sandbox Code Playgroud)

如果按下任何可见键,则调用ajax,否则不调用.

我不知道如何实现这一目标.因为我不能e.keycode == '65'为每个键做,如A,B,C,\,=,+,1,2,3等

是否有现成的库来检查这个或任何其他方式来做到这一点?请帮我.

Roh*_*mar 1

我有另一个解决方案来检查是否按下了可见字符键。实际上,我在代码中使用的基本内容是,按下可见字符键将更改length输入字段的值。我使用keydown而不是在keyup按下当前键之前获取字符串的长度。看看我的代码 -

$('input[name=\'search\']').on('keydown', function() {
      var orig_len = $('input[name=\'search\']').val().length; // this gets the original length just before the key was pressed
      setTimeout(function() {
          if ($('input[name=\'search\']').val().length >= 2 && $('input[name=\'search\']').val().length != orig_len) {
            // my ajax call
          }, 25);
        /* in 25ms the lenght is updated and the if checks
        whether length has changed from previous or not
        because visible char key changes length
        */
      });
Run Code Online (Sandbox Code Playgroud)

setTimeout是必要的,因为这 25 毫秒的运行时间足以在按下当前键后更新输入字段的长度。

请对此进行讨论,并告诉我这是否可以,或者是否会产生一些不良影响,或者可能会在不同的浏览器上引起问题,因为我还没有在其他浏览器上检查过。

更新:它在所有主要浏览器上功能齐全。它按照我想要的方式工作。