jQuery イベント バインディングとデリゲート example_jquery
この記事の例では、jQuery イベントのバインディングと委任について説明します。皆さんの参考に共有してください。具体的な方法は以下の通りです。
JQuery イベントのバインディングと委任は、 on() 、 binding() 、 live() 、 delegate() 、 one() などのさまざまなメソッドを使用して実装できます。
場合によっては、次のようにイベントをバインドすることがあります:
alert("クリック後にトリガー"); });
1. に()
アラート( $(this).text() ); });
//データパラメータがあります
関数 myHandler(event) {
アラート(event.data.foo); }
$("p").on("click", {foo: "bar"}, myHandler)
on() に対応するのは off() で、イベント バインディングを削除するために使用されます。
$("body").on("click", "p", foo);
// ... foo は呼び出されなくなります。
$("body").off("click", "p", foo);
off(): on() によってバインディングを削除します
one(): バインドは 1 回だけです。
2.バインド()
パラメータ:
(タイプ,[データ],関数(イベントオブジェクト))
type: 1 つ以上のイベント タイプを含む文字列。複数のイベントはスペースで区切られます。たとえば、「クリック」や「送信」、またはカスタム イベント名などです。
としてイベント オブジェクトに渡される追加のデータ オブジェクト
fn: 一致する各要素のイベントにバインドされたハンドラー関数
(タイプ,[データ],false)
type: 1 つ以上のイベント タイプを含む文字列。複数のイベントはスペースで区切られます。たとえば、「クリック」や「送信」、またはカスタム イベント名などです。
data:event.data 属性値
としてイベント オブジェクトに渡される追加のデータ オブジェクト
false: 3 番目のパラメータを false に設定すると、デフォルトのアクションが無効になります。
複数のイベント タイプを同時にバインドします:
コードをコピー
コードをコピー
イベント処理の前に追加のデータを渡すことができます。
コードをコピー
false を返すことでデフォルトの動作をキャンセルし、イベントのバブリングを防ぎます。
コードをコピー
バインドの問題
クリック イベントがバインドされているテーブルに 10 列と 500 行がある場合、5000 個のセルを検索して走査すると、スクリプトの実行速度が大幅に低下し、5000 個の td 要素と対応するイベント ハンドラーの保存にも時間がかかります。メモリを大量に消費します (全員が物理的にドアの前に立って配達を待っているのと同じです)。
前の例に基づいて、単純なフォト アルバム アプリケーションを実装したい場合、各ページには 50 枚の写真 (50 セル) のサムネイルのみが表示され、ユーザーは「ページ x」(または「次のページ」) リンクをクリックすると、 Ajax 経由でサーバーからさらに 50 枚の写真を動的にロードします。この場合、 .bind() メソッドを使用した 50 個のセルのバインディング イベントが再び受け入れられるようです。
そうではありません。 .bind() メソッドを使用すると、クリック イベントは最初のページの 50 個のセルにのみバインドされ、動的に読み込まれる後続のページのセルにはこのクリック イベントがありません。つまり、 .bind() は、呼び出されたときにすでに存在する要素にイベントをバインドすることしかできず、将来追加される要素にイベントをバインドすることはできません (新入社員が速達配送を受け取ることができないのと同様)。
イベント委任は、上記の 2 つの問題を解決できます。コードに固有の場合は、.bind() メソッドの代わりに jQuery 1.3 で新しく追加された .live() メソッドを使用してください:
ここの .live() メソッドは、クリック イベントを $(document) オブジェクトにバインドします (ただし、これはコードから反映できません。これは、.live() メソッドが批判されている重要な理由でもあります。これについては後ほど説明します。詳細については後ほど説明します)。$(document) を 1 回バインドするだけで (50 回どころか 5000 回も)、その後に動的に読み込まれるフォト セルのクリック イベントを処理できます。イベントを受信すると、$(document) オブジェクトはイベント タイプとイベント ターゲットを確認し、それがクリック イベントでイベント ターゲットが td の場合、それに委任されたハンドラーが実行されます。
unbind():バインドによって実行されたバインディングを削除します。
3. ライブ()
これまでのところ、すべてが完璧に見えます。残念ながらそうではありません。 .live() メソッドは完璧ではないため、次のような大きな欠点があります:
$() 関数は、現在のページ内のすべての td 要素を検索し、jQuery オブジェクトを作成します。ただし、この td 要素コレクションは、イベント ターゲットを確認するときに使用されず、代わりにセレクター式を使用して、event.target またはその祖先と比較します。したがって、この jQuery オブジェクトを生成すると、不要なオーバーヘッドが発生します。
デフォルトでは、イベントは $(document) 要素にバインドされます。DOM の入れ子構造が非常に深い場合、多数の祖先要素を介してイベントがバブリングするとパフォーマンスが低下します。
これは、直接選択された要素の後にのみ配置でき、連続した DOM トラバーサル メソッドの後には使用できません。つまり、$("#info_table td").live... は使用できますが、$("#info_table") .find("td" ).live...いいえ;
td要素を集めてjQueryオブジェクトを作成するのですが、実際に動作するのは$(document)オブジェクトなのでわかりにくいです。
解決策
不要な jQuery オブジェクトの生成を避けるために、「早期委任」と呼ばれるハックを使用できます。これは、$(document).ready() メソッドの外側で .live() を呼び出すことです。
ここで、(function($){...})(jQuery) は「すぐに実行される匿名関数」であり、名前の競合を防ぐためのクロージャを形成します。匿名関数内で、$parameter は jQuery オブジェクトを参照します。この匿名関数は、DOM の準備ができるまで待機せずに実行されます。このハックを使用する場合、ページの head 要素でスクリプトをリンクまたは実行する必要があることに注意してください。このタイミングを選択した理由は、この時点ではドキュメント要素が利用可能であり、スクリプトが body 終了タグの前に配置されても、DOM が完全に完了しているため意味がありません。その時点で利用可能です。
コードをコピー
このようにして、「トラスティ」がデフォルトの $(document) から $("#info_table")[0] に変更され、バブリングの手間が省けます。ただし、.live() で使用されるコンテキスト パラメーターは別の DOM 要素である必要があるため、ここでは配列インデックス演算子を使用して取得される $("#info_table")[0] を使用してコンテキスト オブジェクトを指定します。
4. デリゲート()
前述したように、単一の .bind() メソッドの制限を突破してイベント委任を実装するために、jQuery 1.3 では .live() メソッドが導入されました。その後、長すぎる「イベント伝播チェーン」の問題を解決するために、jQuery 1.4 では .live() メソッドのコンテキスト オブジェクトの指定をサポートしました。要素コレクションの不必要な生成の問題を解決するために、jQuery 1.4.2 では新しいメソッド.delegate() が導入されました。
.delegate() を使用すると、前の例は次のように記述できます:
.delegate() を使用すると、次のような利点があります (または、.live() メソッドの次の問題が解決されます):
ターゲット要素セレクター ("td")、イベント ("click")、およびハンドラーを "dragee" $("#info_table") に直接バインドします。追加の要素のコレクション、短縮されたイベント伝播パス、および明確なセマンティクスは必要ありません。 >
.delegate() メソッドは比較的完璧なソリューションであることがわかります。ただし、DOM 構造が単純な場合は、.live() も使用できます。
ヒント: イベント委任を使用する場合、ターゲット要素に登録されている他のイベント ハンドラーが .stopPropagation() を使用してイベントの伝播を防止すると、イベント委任は無効になります。
undelegate(): delegate
のバインディングを削除します。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









MetaMask (中国語ではリトル フォックス ウォレットとも呼ばれます) は、無料で評判の高い暗号化ウォレット ソフトウェアです。現在、BTCC は MetaMask ウォレットへのバインドをサポートしており、バインド後は MetaMask ウォレットを使用してすぐにログイン、値の保存、コインの購入などが可能になり、初回バインドで 20 USDT のトライアル ボーナスも獲得できます。 BTCCMetaMask ウォレットのチュートリアルでは、MetaMask の登録方法と使用方法、および BTCC で Little Fox ウォレットをバインドして使用する方法を詳しく紹介します。メタマスクウォレットとは何ですか? 3,000 万人を超えるユーザーを抱える MetaMask Little Fox ウォレットは、現在最も人気のある暗号通貨ウォレットの 1 つです。無料で使用でき、拡張機能としてネットワーク上にインストールできます。

今日の情報爆発の時代において、個人のブランドや企業イメージの構築はますます重要になっています。中国を代表するファッションライフ共有プラットフォームとして、Xiaohongshu は多くのユーザーの注目と参加を集めています。影響力を拡大し、コンテンツ配信の効率化を図りたいユーザーにとって、サブアカウントの紐付けは有効な手段となっています。では、Xiaohongshu はどのようにしてサブアカウントをバインドするのでしょうか?アカウントが正常かどうかを確認するにはどうすればよいですか?この記事では、これらの質問に詳しく答えます。 1.Xiaohongshu でサブアカウントをバインドするにはどうすればよいですか? 1. メインアカウントにログインします。まず、Xiaohongshu メインアカウントにログインする必要があります。 2. 設定メニューを開きます。右上隅の「Me」をクリックし、「設定」を選択します。 3. アカウント管理に入る: 設定メニューで、「アカウント管理」または「アカウントアシスタント」オプションを見つけて、クリックします。

1. Toutiaoを開きます。 2. 右下隅の「My」をクリックします。 3. [システム設定]をクリックします。 4. [アカウントとプライバシーの設定]をクリックします。 5. [Douyin]の右側のボタンをクリックしてDouyinをバインドします。

Cainiao アプリは、さまざまな物流情報を提供できるプラットフォームです。ここの機能は非常に強力で使いやすいです。物流関連の問題があれば、ここで解決できます。とにかく、それはあなたに 1 つをもたらすことができます-stopサービスはすべてを時間内に解決できます。速達の確認、速達の受け取り、速達の発送などはすべて問題なく行われます。さまざまなプラットフォームと連携しており、すべての情報を照会できます。しかし、場合によっては、 Pinduoduo で購入した商品は物流情報を表示できない場合がありますが、実際には、これを実現するには手動で Pinduoduo をバインドする必要があります。具体的な方法は以下に整理されており、誰でも見ることができます。 Cainiao を Pinduoduo アカウントにバインドする方法: 1. Cainiao APP を開き、メインページに移動します。

jQueryでPUTリクエストメソッドを使用するにはどうすればよいですか? jQuery で PUT リクエストを送信する方法は、他のタイプのリクエストを送信する方法と似ていますが、いくつかの詳細とパラメータ設定に注意する必要があります。 PUT リクエストは通常、データベース内のデータの更新やサーバー上のファイルの更新など、リソースを更新するために使用されます。以下は、jQuery の PUT リクエスト メソッドを使用した具体的なコード例です。まず、jQuery ライブラリ ファイルが含まれていることを確認してから、$.ajax({u

Xiaomi が発売した最新の Mi su7 モデルカーは、さまざまなホット検索リストを独占しています。車を購入したいと考えている多くのユーザーが、購入のために Xiaomi su7 モデルカーを選択しました。では、Xiaomi 車アプリを使用して、選択後に車をバインドするにはどうすればよいですか?充電に家庭用充電パイルを使用する場合は、このチュートリアル ガイドで詳しく説明しますので、お役に立てれば幸いです。まず、Xiaomi モバイル アプリを開き、右下隅にある [My] ボタンをクリックすると、My インターフェイスで、ホーム充電パイルのオプションが表示され、充電パイルをバインドするページに入った後、スキャン コードをクリックします下のボタンをクリックして、充電パイルの QR コードをスキャンします。QR コードを使用して、充電パイルをアプリにバインドできます。

Cainiao Wrap を使用するときに Pinduoduo をバインドする方法をご存知ですか? Cainiao Wrap アプリの公式バージョンでは、このプラットフォーム上の Pinduoduo の物流情報の一部が自動的に同期されません。注文番号をコピーするか、携帯電話で確認するだけです。速達情報がある場合。もちろん、これらはすべて手動で完了する必要があります。さらに詳しく知りたい場合は、エディターに来て確認してください。 Cainiao APP を Pinduoduo にバインドする方法 1. Cainiao APP を開き、メイン ページの左上隅にある「パッケージ ガイド」をクリックします。 2. インターフェイスには、多くのショッピング サイトがあり、アカウントをバインドできます。 3. クリックして他の電子商取引プラットフォームをインポートします。 4. ユーザー認証: Pinduoduo をクリックしてインターフェイスに移動します。

Black Box が Steam にバインドできないのは、ネットワークまたはソフトウェアのバージョンの問題が原因である可能性があります。この小さなブラック ボックスには、リリース済みおよび今後発売予定のゲームの価格、コンピュータの構成要件とレビュー、詳細なゲームプレイ分析などの情報が含まれています。さらに、ユーザーはいつでもどこでもモバイルデバイスを通じて必要な情報を見つけることができます。小さなブラック ボックスを Steam にバインドできない場合の対処方法 1. ネットワークの状態を確認し、デバイスがインターネットに接続されていることを確認します。 2. Little Black Box のバージョンを確認する Little Black Box ソフトウェアの最新バージョンを使用していることを確認し、Steam アカウントをバインドしてみてください。 3. Steam アカウントの設定を確認するには、Steam アカウントにログインし、プライバシー設定でサードパーティ ソフトウェアのバインド機能がオンになっているかどうかを確認してください。 4. 公式カスタマーサービスに問い合わせる 上記の手順を実行しても問題が解決しない場合は、公式カスタマーサービスに問い合わせることをお勧めします。
