3

私はかなり長い間それらを使用してきましたが、ほとんどの場合、短い方を好みますが、本質的な詳細を本当に掘り下げたいだけです. 私はバグのあるコードを作成している可能性があり、怠惰に作成されたコードを Web に投稿したり広めたりしたくありません。

だから、教えてください:

それらの間で重要な利点/欠点は何ですか?それとも、アイスクリームのようなもので、さまざまなフレーバーがありますが、同じ「気分が良い」効果はありますか?

誰もがこの問題に関する専門家の意見を提出することをお勧めします。

よろしくお願いします。

4

2 に答える 2

4

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").clickclick() ドキュメントから取得:

最初の 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() で使用できません。
    1. または ボタンなどのネイティブにクリック可能な要素を使用します。これらはどちらもドキュメントにバブルするためです。
    2. モバイル iOS はボディ内でバブリングするため、document.body のレベルより下の要素にアタッチされた .on() または .delegate() を使用します。
    3. CSS スタイルの cursor:pointer を、バブル クリックが必要な要素 (または document.documentElement を含む親要素) に適用します。ただし、これにより要素のコピー/貼り付けが無効になり、タッチすると強調表示されることに注意してください。
  • イベント ハンドラーで event.stopPropagation() を呼び出しても、ドキュメントの下にあるイベント ハンドラーを停止するのには効果がありません。イベントはすでにドキュメントに伝達されています。
  • .live() メソッドは、驚くべき方法で他のイベント メソッドとやり取りします。

ただし、ドキュメントにはさらに多くの優れた機能があります。

その他のリソース
click()
bind()
live() (使用しないでください)
delegate()
on()

于 2012-06-21T23:03:32.757 に答える
1

その特定のケースでは、機能に違いはありません。ただし、jQuery 1.7 以降では、.onよりも優先されます。これは、一般的なイベント ハンドラーの省略形にすぎません。.bind.click

于 2012-06-21T23:01:23.910 に答える