vue做一个搜索,每次按下键盘都会请求一次?

clipboard.png

一个类似微信的搜索,没有“搜索”按钮,就一个input框。

<input @keyup="load_list($event)">

现在一个问题:
输入“ABCD”
向后台发送了4次请求
A一次
B一次
C一次
D一次

于是我加了定时器,1秒后发送请求:
输入“ABCD”
向后台发送了4次请求
ABCD一次
ABCD一次
ABCD一次
ABCD一次

我要疯了,有好的解决方法么?

阅读 4.8k
9 个回答

写定时器是完全可以实现的 每次输入的时候都要先清除定时器 然后再新开一个定时器 什么时候时间到了 什么时候才会触发。example:

全局:let timer = null;
method:{
    load_list(){
        clearInterval(timer);
        timer = setInterval(()=>{
            Ajax();
        }, 1000)
    }
}

try one try.

你需要防抖(debounce)函数

比较简单稳定的方法:引入 lodash
如果想控制输入后函数执行的频率,使用 lodash 中的 debounce 模块。
参考链接

跟vue没关系,你用的keyup事件,就是每次按键了抬起就触发一次,你可以写个定时器,没问题,但是要用setinterval,var aa = setinterval(); 设置一个输入时限,入过在时限内,就clearInterval(aa),然后再加setinterval.

新手上路,请多包涵

输入之后设置个定时器来控制请求,如果又监听到键盘的输入操作,取消定时器,如果没有就请求

那就在后面加一个确定按钮,或者监听回车键,再搜索

用@input事件即可。改动最小

  • 推荐@input事件
  • 首先你要搞清楚你搜索的规则(字符串length..)达到这个规则再进行请求
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题