在 jquery 中搜索 typeahead 触发时间

Posted

技术标签:

【中文标题】在 jquery 中搜索 typeahead 触发时间【英文标题】:Search typehead trigger time in jquery 【发布时间】:2021-09-02 18:52:43 【问题描述】:

有什么方法可以在 laravel vuejs 中每 3 秒触发一次事件,但我一直在我的脚本中使用 Jquery。问题是当我搜索和输入任何字符串时,因为我一直在使用 @987654321 @ 在输入类型上,它将触发我输入的每个字符的事件。我想要的,它会在你停止输入至少 3 秒时触发,否则如果你继续输入它不会触发事件,有什么办法可以实现吗?这对我很有帮助。

目前我已经尝试过settimeout,但每次我输入都会在设置时间后得到多个结果。

<input type="text" class="form-control required-field" name="driver_fullname" placeholder="Enter fullname" v-model="formFields.fullname" v-on:keyup="typehead"/>

脚本

   typehead()
        let vm = this;
        let driveInfo = vm.formFields.fullname;

         setTimeout(() => 
            axios.put(BASE_URL + '/transportation/driver/autoComplete/' + driveInfo).then(response => 
            console.log(response.data);
            );
        , 500);
    ,

【问题讨论】:

【参考方案1】:

听起来您真正想要的是消除用户输入的抖动,以防止每次击键时调用 API。

查看https://www.npmjs.com/package/debounce

如果您真的想在用户停止输入后延迟三秒,一种方法是使用clearTimeout()

typeaheadTimeout: null 添加到您的组件data

然后:

typehead() 
  let driveInfo = this.formFields.fullname;

  if (this.typeaheadTimeout) 
    clearTimeout(this.typeaheadTimeout);
  

  this.typeaheadTimeout = setTimeout(() => 
    axios.put(BASE_URL + '/transportation/driver/autoComplete/' + driveInfo).then(response => 
      console.log(response.data);
    );
  , 3000);
,

【讨论】:

以上是关于在 jquery 中搜索 typeahead 触发时间的主要内容,如果未能解决你的问题,请参考以下文章

以编程方式触发 typeahead.js 结果显示

Typeahead 不适用于 javascript/jquery

Typeahead.js - 在多个属性值中搜索

Symfony 5 Typeahead 搜索 [关闭]

从 Jquery-ui 自动完成到 typeahead.js

在 Laravel 5.5 中使用 Typeahead.js 使用两个表格列进行自动完成搜索