Javascript 如果在时间运行时收到数据,如何重置设置超时?
我在VUE应用程序中有一个文本类型输入,我在其中收集数据,当我收集完数据后,我必须显示另一个组件Javascript 如果在时间运行时收到数据,如何重置设置超时?,javascript,vue.js,settimeout,cleartimeout,Javascript,Vue.js,Settimeout,Cleartimeout,我在VUE应用程序中有一个文本类型输入,我在其中收集数据,当我收集完数据后,我必须显示另一个组件 <input type="text" v-model="textFormInfo.text" @keypress="onChangeText($event)" />
<input
type="text"
v-model="textFormInfo.text"
@keypress="onChangeText($event)"
/>
<div class="loader-spinner" v-if="loading">
<app-loader ref="spinner"/>
</div>
export default {
data() {
return {
myTimeout: null
};
},
onChangeName(event) {
if (event.target._value.length > 0) {
this.loading = true;
this.myTimeout = setTimeout(() => (
this.isNameCompleted = true,
this.loading = false,
this.isLoaderFinished = true,
this.$refs.scrolled_3.focus()), 2200);
}
}
问题是,如果键入速度慢或信息太长,则在您完成键入之前会显示下一个组件。
我试图确保每次收到按键时,我都会重置settimeout,以便只有当我停止接收按键时,才会应用总settimeout值
我尝试了下面的例子,其中使用了clearTimeout方法,但我不知道在这种情况下如何实现它。
我怎么能得到这个?任何想法
问候并提前感谢您的时间和帮助我认为您在这里试图实现的是去抖动如果我是正确的,您可以这样做,每次按kry键,我们都会创建一个超时,如果在特定时间内未按该键,则会调用settimeout中的方法
var timeoutId = 0;
function keypress() {
if (timeoutId >= 0) {
clearTimeout(timeoutId);
}
timeoutId = window.setTimeout(() => {
callMethod();
}, 500);// time to wait to listen for next keypress if not pressed callMethod will execute
}
非常感谢,这正是我想要的互动!谢谢你的帮助