2016-04-22 73 views
0

我正在嘗試使用TypeScript構建簡單的延遲搜索。我用這裏所描述的答案@stackoverflow使用TypeScript不等待的延遲javascript/jQuery搜索

目前,我的劇本是這樣的:

$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-調用。 這是一些範圍問題timerwaitTimeOut?或者是錯誤範圍內的'函數定義'?

還不確定在這裏使用fat-arrow是否正確。

回答

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); 
+0

我改變你的答案,'ReSharper'建議我,用'轉換爲λ-expression'。這將刪除'self'並將第一個參數更改爲'()=> {this.lookup(val)}'。現在我有點困惑什麼打字稿正是在這裏引起的。 – KingKerosin

+0

@KingKerosin,我對TypeScript不太好,所以幫不了你,我的是普通香草JS腳本 – Satpal