JQuery1.7で.on()
を使用していて、ページに挿入された要素に対して一度に複数のセレクターをアタッチできるかどうか疑問に思いました。以前はlive()
を使用していましたが、パフォーマンスが向上したため、移動したい理由は明らかです。
.on()
を次のように使用できますか。
$(document).on('click', '#selector1, #selector2, .class1', function () {
//stuff
});
また、ドキュメントに添付することで失われるメリットはありますか?
?
次のような方法で.on()を使用できますか?
_$(document).on('click', '#selector1, #selector2, .class1', function () { //stuff });
_
パフォーマンスが向上したので、
live()
の代わりにこれを使用したいと思います。
live()
自体がバインドするため、live()
を使用するのではなく、そのコードスニペットを使用することにはnoのパフォーマンス上の利点があります。ドキュメントへのイベント、およびjQuery 1.7では、ライブは舞台裏でon
を呼び出します。
また、ドキュメントに添付することで失われるメリットはありますか?
document
にバインドすることの欠点は、イベントが処理される前に、祖先のリスト全体をトラバースする必要があることです。これ、 jQueryのドキュメントで指摘されているように は、可能な限り最も遅いルートです。イベントのソースに近い要素にハンドラーをアタッチすることで、イベントをより早く処理することをお勧めします。
それは可能であり、「これ」はクリックされたセレクターであり、ドキュメントではありません。
セレクターの最も近い親要素にアタッチすることをお勧めします。 '#selector1'をクリックすると、イベントはイベントハンドラー要素(ヒアドキュメント)に移動します。
レイヤーが多いほど、アクションも多くなります。さらに、selector1とdocumentの間に別のクリックイベントハンドラーがある場合、それはevent.stopPropagation();
でインターセプトされ、「document」イベントハンドラーに到達することはありません。
不正なイベント「インターセプト」を確認できます このフィドルで 。