cha*_*les 5 laravel vue.js laravel-5 vuejs2 laravel-6
我有一个搜索模块,其中:当用户停止输入时,它应该搜索 name。
我认为解决方案是做一个timeoutwhen a user keyup. 参考
<input type="text" @keyup="textSearch($event)">
textSearch(e){
var timer;
clearTimeout(timer);
timer = setTimeout(() => {
alert('searching...');
}, 2500);
}
Run Code Online (Sandbox Code Playgroud)
代码全部正常工作,问题是为什么当我在 1 秒内输入 3 个字符时,它会弹出 3 个警报?我预计应该会弹出一个窗口,因为它会等待 2.5 秒。
代码有问题吗?需要帮助先生们
Mar*_*sbo 15
如果我正确理解您的问题,那么您每次运行时清除的超时textsearch()不是您上次创建的超时,而是您刚刚使用var timer. 我建议将计时器变量存储在数据属性中,而不是让clearTimeout清除正确的超时。
像这样的东西:
data: {
timer: undefined
},
methods: {
textSearch(e){
clearTimeout(this.timer)
this.timer = setTimeout(() => {
alert('searching...')
}, 2500)
}
}
Run Code Online (Sandbox Code Playgroud)
通过我的修改来处理您的代码:
https://jsfiddle.net/MapletoneMartin/yjxfsehz/2/
祝你好运!
这是一个解决方案:
setTimeout没问题——或者,你也可以使用debounce Vue-debounce
<input v-debounce:400ms="myFn" type="text" />
<script>
export default {
methods: {
myFn(val) {
console.log(val) // => The value of the input
}
}
}
</script>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9044 次 |
| 最近记录: |