2016-04-22 6 views
0

TypeScriptで簡単な遅延検索を作成しようとしています。私はここに記載されているように答えを使用しました@stackoverflow待機していないタイプスクリプトを使用した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 -callをトリガーします。 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にはあまり良くないので、そこにお手伝いできません、私はPlain vanilla JSスクリプト – Satpal

関連する問題