2011-12-15 11 views
0

私は、keyup()によってトリガーされたテキスト入力でキーワードが入力されたload()という項目のリストを持つ<div>を持っています。 keyup()のそれぞれの検索項目でそのキーワードを強調表示するjqueryプラグインを実行すると、ページが遅くなり、ブラウザがクラッシュすることさえあります。jqueryで誰かが1秒で入力していないときに関数をどのように呼び出すことができますか?

だから私は人が2番目または2番目の文字を入力しないでハイライト機能をトリガーした後に、このハイライト機能を起動するしか方法がないのだろうかと思っています。それとも、最後にトリガーするように、キューの最後にそれを保持できるのでしょうか?あなたはその一秒が経過する前に、新しいキーストロークが受信される場合に強調するために呼び出し、およびclearTimeoutを遅らせるためにsetTimeoutを使用したい

THX

答えて

1

var timeout; 

$('#my-input').keyup(function() { 

    // clear previous timeout if there was one 
    window.clearTimeout(timeout); 

    // set new one 
    timeout = setTimeout(function() { 

     // make your highlight call here 

    }, 1000); 

}); 
+0

は完全に機能しました。どうもありがとうございました! –

4

var myTimeout = null;のようなグローバルタイムアウト変数をキープ。あなたのkeyup()ハンドラの中で、myTimeout = window.setTimeout(highlight, 1500);を起動し、(前の)タイムアウトがまだ実行されている場合はキャンセルすることができます。ハイライト機能の中で、myTimeoutを再びnullにリセットします。 2S前にこれをキャンセルする2S、ユーザーclearTimeout後に実行する機能を設定するための

var myTimeout = null; 

$('#whatever').keyup(function() { 
    if(myTimeout) clearTimeout(myTimeout); 
    .... 
    myTimeout = window.setTimeout(highlight, 1500); 
}); 

function highlight() { 
    myTimeout = null; 
    ... 
} 
2

利用setTimeoutのラインで

何かが終了されています。ここでは

var timeoutId; 

$("input").keyup(function(){ 

    if(timeoutId){ 
     clearTimeout(timeoutId); 
    } 

    timeoutId = setTimeout(intervalFunc, 2000); 
}); 

は例です:http://jsfiddle.net/tdbsY/

関連する問題