javascript - 使用哪个事件进行搜索输入

标签 javascript jquery ajax

我有一个搜索字段,它收集查询并使用 AJAX 请求执行搜索。我无法找到用于执行搜索的完美 JavaScript 事件。

输入时 使用 oninput,AJAX 请求会被多次触发,每次针对输入字段中的每个字符。因此搜索“123”将执行三个 AJAX 请求:

  1. '1'
  2. '12'
  3. '123'

onchange 使用 onchange 更有效,因为它只触发单个 AJAX 请求,但它强制用户从搜索字段更改焦点才能触发。

是否有一个 JavaScript 事件可以让我两全其美?我在搜索时使用 1.5 秒的超时延迟,以便为用户提供足够的时间输入搜索查询。理想情况下,我想使用像 oninput 这样的 JS 事件,该事件无需字段失去焦点即可触发,但仅针对整个值触发一次,而不是针对输入字段中的每个字符触发一次。

也许答案是使用 onchange 事件并在 1.5 秒后自动失去焦点?这看起来很老套,而且还引入了一个可用性问题,因为如果用户想要更改搜索查询,他们需要再次将焦点设置在搜索字段上。

最佳答案

这就是你可以做到的,消除 input 事件:

$('input[type=search]').on('input', function(){
   clearTimeout(this.delay);
   this.delay = setTimeout(function(){
      console.log(this.value);
      /* call ajax request here */
   }.bind(this), 800);
});

为了更好的 UIX,您也应该绑定(bind) search 事件:

$('input[type=search]').on('search', function(){
   if(this.value){
     /* call ajax request here */
   }
});

参见-DEMO-

关于javascript - 使用哪个事件进行搜索输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37527806/

相关文章:

Javascript 意外标识符错误

javascript - Node v0.10.25 中的字符串原型(prototype)没有 'endsWith'

javascript - 为什么我无法跳出这个 for 循环?

javascript - 更改链接颜色 onclick 而不使用 PreventDefault()

javascript - JQuery:如何从焦点事件调用单击事件?

java - 如何从没有提交按钮的情况下调用 Struts2 操作

javascript - 在评论之前只抓取元素

javascript - 将密码存储在 Javascript localStorage 中

jQuery:扩展、添加新功能并构建插件?

javascript - javascript 函数参数的值如何在页面请求中保留下来?