bind()
1.0、1.3、1.4.2、1.7live()
で追加されました。delegate()
on()
1.7以降on()
は推奨される使用法であり、live()
推奨されておらず、まったく推奨されていません。1.3 を使用している場合は、1.4.2 のbind()
代わりに使用し、1.7の場合は他のいずれかの代わりに使用してください。live()
delegate()
live()
on()
について$("selector").click
。click()
ドキュメントから取得:
最初の 2 つのバリエーションでは、このメソッドは .bind("click", handler) のショートカットであり、jQuery 1.7 以降では .on("click", handler) のショートカットでもあります。3 番目のバリエーションでは、.click() が引数なしで呼び出されると、.trigger("click") のショートカットになります。
他の代わりに on() を使用する理由
on()
は最新の追加で、バージョン 1.7 で jQuery ライブラリに加わりました。on()
にはいくつかのメソッド シグネチャがあり、以前のバージョンと同じ結果を提供できますが、改善および最適化されています。ドキュメントから引用するには:
jQuery 1.7 以降、.on() メソッドは、イベント ハンドラーをアタッチするために必要なすべての機能を提供します。
基本的に使用する必要はありbind()
ませdelegate()
ん。確かにそれは機能し、これらの方法を使用しても害はないはずですが、最新の追加は以前のバージョンの欠点のいずれかが最適化され、改善されていると常に想定しています (の場合のようにドキュメントで特に明記されていない限りlive()
) .
それに基づいて、on()
代わりに使用することをお勧めします。
live()
フルストップが推奨されない理由は、その欠点と関係があります。live()
ドキュメントから引用するには。
.live() メソッドの使用は推奨されなくなりました。jQuery の新しいバージョンでは、欠点のないより優れたメソッドが提供されているためです。特に、.live() を使用すると、次の問題が発生します。
- jQuery は、.live() メソッドを呼び出す前に、セレクターによって指定された要素を取得しようとしますが、大きなドキュメントでは時間がかかる場合があります。
- メソッドの連鎖はサポートされていません。例: $("a").find(".offsite, .external").live( ... ); は有効ではなく、期待どおりに動作しません。
- すべての .live() イベントはドキュメント要素に関連付けられているため、イベントは処理される前に可能な限り長くて最も遅いパスをたどります。
- モバイル iOS (iPhone、iPad、および iPod Touch) では、クリック イベントはほとんどの要素のドキュメント本文にバブルされず、次の回避策のいずれかを適用しないと .live() で使用できません。
- または ボタンなどのネイティブにクリック可能な要素を使用します。これらはどちらもドキュメントにバブルするためです。
- モバイル iOS はボディ内でバブリングするため、document.body のレベルより下の要素にアタッチされた .on() または .delegate() を使用します。
- CSS スタイルの cursor:pointer を、バブル クリックが必要な要素 (または document.documentElement を含む親要素) に適用します。ただし、これにより要素のコピー/貼り付けが無効になり、タッチすると強調表示されることに注意してください。
- イベント ハンドラーで event.stopPropagation() を呼び出しても、ドキュメントの下にあるイベント ハンドラーを停止するのには効果がありません。イベントはすでにドキュメントに伝達されています。
- .live() メソッドは、驚くべき方法で他のイベント メソッドとやり取りします。
ただし、ドキュメントにはさらに多くの優れた機能があります。
その他のリソース
click()
bind()
live() (使用しないでください)
delegate()
on()