2011-01-27 3 views
11

それはイベントの委任を使用しますが、誰もがより多くを持っている場合、各変更livequery性能

に全体のDOMのすべてのバインド可能なイベントと再チェックを結合していないとして、私は最近、jQueryのためのプラグインをlivequery discoveredは、かなりの無駄かもしれましたライブクエリーと.live()を使用したベストプラクティスに関する情報や提案、私は非常に感謝します

+1

以下の「patrick dw」の回答に記載されているように、.live()と.delegate()は、コアにlivequeryの同じ作者による統合がほとんどあります。http:// brandonaaronのブログを参照してください。少なくとも私がそれを理解するネット/ブログ:) –

答えて

11

実際にはlivequeryのようなプラグインが必要になることは稀です。あなたが本当に必要とする唯一の時間は、を変更できない他のjQueryコードによって作成されたDOMの変更に対応する必要がある場合です。

.live()がイベントの委任を使用していますが、それはそれは、彼らがイベントの種類ごとに提供セレクタに一致するかどうかを確認するために、ページ上のすべてのイベントを処理する必要があることを意味しdocumentレベル、上でそれをしません。

これらの両方のより良い代替(IMO)は、.live()のようなイベント委任を使用するdelegate()(docs)メソッドですが、ページの特定の部分に制限することができます。

$('#someContainer').delegate('a.someButton', 'click', function() { 
    // do something when an "a.someButton" inside "#someContainer" is clicked 
}); 

イベントの委任方法は、ブラウザイベントに応答し、DOMの変更には反応しません。作成したDOMの変更に基づいていくつかのコードを実行する必要がある場合は、そのコードを DOMに変更するときにそのコードを実行する必要があります。

+3

+1、私に参照してください:http://brandonaaron.net/blog代表団の詳細については。 –

+0

これはすばらしい答えですが、このアプローチはバブルアップするイベントでのみ機能することに注意してください。 「無効」(フォーム要素が検証に失敗したときに起動される)などのイベントは、バブルアップしないため、委任によって取得することはできません。 –