我正在尝试使用TypeScript
构建一个简单的延迟搜索。我使用了@stackoverflow所述的答案。
目前,我的脚本如下所示:
$searchInput: JQuery;
timer: number;
waitTimeOut = 3000;
init() : void{
this.$searchInput.on("input propertychange paste", this.handleSearchInputChange);
}
handleSearchInputChange = (evt: Event): void => {
var $theInput = $(evt.currentTarget);
clearTimeout(this.timer);
var val = $theInput.val();
this.timer = setTimeout(this.lookup(val), this.waitTimeOut);
}
lookup = (searchTerm: string): void => {
console.log(`I should start a search with [${searchTerm}]`);
}
然而,根本没有延迟。每个打字的字母都会立即触发lookup
- 来电。
这是timer
和waitTimeOut
的范围问题吗?或者“函数定义”是否在错误的范围内?
仍然不确定此处是否使用fat-arrow
是否正确。
答案 0 :(得分:3)
根据您当前的实现,您当前正在调用函数lookup(val)
并将其返回值传递给setTimeout
。
setTimeout
接受字符串格式或函数的代码来执行哪个延迟间隔。
使用
var self = this;
this.timer = setTimeout(function(){
self.lookup(val);
}, this.waitTimeOut);
而不是
this.timer = setTimeout(this.lookup(val), this.waitTimeOut);