关于js函数去抖

页面很简单,就一个input框

<input type="text" v-model="keyword" @keyup="search($event)">

js:

methods:{
    //键盘按下事件
    search:function(e){
        var timer;
        if(e.keyCode != 32){ //空格
            clearTimeout(timer);
            timer = setTimeout(()=>{
                console.log("这里写交互");
            }, 1000)
        }
    }
}

当我输入“123”时,打印了3次

clipboard.png

我想要的效果:
当我输入“123”时,就打印了1次

阅读 2.5k
3 个回答

var timer; 定义在search外边 要不每次触发都新定义了一个timer 就不是上次settime的handle了

因为你的timer每次点击的时候都重新声明了一下,把timer声明放到外部就好了

search:function(e){
        var timer; // 你函数每次触发,都重新声明了timer,也就是说你每次clearTimeout的time是一个undefined,我是这样理解的,把这行注释掉,再看看效果。
        if(e.keyCode != 32){ //空格
            clearTimeout(timer);
            timer = setTimeout(()=>{
                console.log("这里写交互");
            }, 1000)
        }
    }
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题