2011-12-24 9 views
0

次のスクリプトを使用して、受信トレイにテキストが含まれていないdivを除外しています。 (Facebookのフレンドタブに似ています)KeyPressでイベントをトリガーするのはCPUが過多です

$('#friend_search_form input').keyup(function(){ 
    var $searchString = $(this).val(); 
    $('.buddy').show(); 
    $('.buddy_name > a:contains('+$searchString+')').closest('.buddy').hide(); 
    console.log($searchString); 
}) 

入力したときに問題が発生するのは、多くのリソースを必要とし、バグが発生することです。

これを書き込むにはどうすればよいですか?

+0

これはおそらくhttp://s.tk/reviewのより良い質問です。 –

答えて

3

キーを押すたびにコードを実行するのではなく、ユーザーが一定時間入力を停止するまで待ちませんか?

var typingTimeout; 

$('#friend_search_form input').keyup(function(e) { 
    if (typingTimeout != undefined) { 
    clearTimeout(typingTimeout); 
    } 

    typingTimeout = setTimeout(function() {   
    var $searchString = $(this).val(); 

    $('.buddy').show(); 
    $('.buddy_name > a:contains('+$searchString+')').closest('.buddy').hide(); 
    console.log($searchString); 
    }, 500); 
}); 
+0

代わりに、[プラグインを使用する](http://benalman.com/projects/jquery-throttle-debounce-plugin/)。しかし、デバウンスは正しい考えです。 –

+0

このエラーが発生しました。「e.nodeName is undefined」 –

+0

@MДΓΓLLLLLLのプラグインを試してください。このコードをテストするためのデモはありませんので、私はそれを盲目的に書いています。 – Blender

0

セレクタは、例えばID、あるいはタグ名と同様にクラスを指定するためのより方法遅いとしてのみクラス名を使用します。 (すぐに#buddies要素が見つかるとすぐにdiv要素のクラス名と一致する必要があります)の$('.buddy')(これは、ページ内のすべての要素を経由します)のようなIDで始めることでセレクタを絞り込むこともできますクラス名の一致を試みます)。

関連する問題