この記事の例では、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
のバインディングを削除します。

JavaScriptは、Webページのインタラクティブ性とダイナミズムを向上させるため、現代のWebサイトの中心にあります。 1)ページを更新せずにコンテンツを変更できます。2)Domapiを介してWebページを操作する、3)アニメーションやドラッグアンドドロップなどの複雑なインタラクティブ効果、4)ユーザーエクスペリエンスを改善するためのパフォーマンスとベストプラクティスを最適化します。

CおよびJavaScriptは、WebAssemblyを介して相互運用性を実現します。 1)CコードはWebAssemblyモジュールにコンパイルされ、JavaScript環境に導入され、コンピューティングパワーが強化されます。 2)ゲーム開発では、Cは物理エンジンとグラフィックスレンダリングを処理し、JavaScriptはゲームロジックとユーザーインターフェイスを担当します。

JavaScriptは、Webサイト、モバイルアプリケーション、デスクトップアプリケーション、サーバー側のプログラミングで広く使用されています。 1)Webサイト開発では、JavaScriptはHTMLおよびCSSと一緒にDOMを運用して、JQueryやReactなどのフレームワークをサポートします。 2)ReactNativeおよびIonicを通じて、JavaScriptはクロスプラットフォームモバイルアプリケーションを開発するために使用されます。 3)電子フレームワークにより、JavaScriptはデスクトップアプリケーションを構築できます。 4)node.jsを使用すると、JavaScriptがサーバー側で実行され、高い並行リクエストをサポートします。

Pythonはデータサイエンスと自動化により適していますが、JavaScriptはフロントエンドとフルスタックの開発により適しています。 1. Pythonは、データ処理とモデリングのためにNumpyやPandasなどのライブラリを使用して、データサイエンスと機械学習でうまく機能します。 2。Pythonは、自動化とスクリプトにおいて簡潔で効率的です。 3. JavaScriptはフロントエンド開発に不可欠であり、動的なWebページと単一ページアプリケーションの構築に使用されます。 4. JavaScriptは、node.jsを通じてバックエンド開発において役割を果たし、フルスタック開発をサポートします。

CとCは、主に通訳者とJITコンパイラを実装するために使用されるJavaScriptエンジンで重要な役割を果たします。 1)cは、JavaScriptソースコードを解析し、抽象的な構文ツリーを生成するために使用されます。 2)Cは、Bytecodeの生成と実行を担当します。 3)Cは、JITコンパイラを実装し、実行時にホットスポットコードを最適化およびコンパイルし、JavaScriptの実行効率を大幅に改善します。

現実世界でのJavaScriptのアプリケーションには、フロントエンドとバックエンドの開発が含まれます。 1)DOM操作とイベント処理を含むTODOリストアプリケーションを構築して、フロントエンドアプリケーションを表示します。 2)node.jsを介してRestfulapiを構築し、バックエンドアプリケーションをデモンストレーションします。

Web開発におけるJavaScriptの主な用途には、クライアントの相互作用、フォーム検証、非同期通信が含まれます。 1)DOM操作による動的なコンテンツの更新とユーザーインタラクション。 2)ユーザーエクスペリエンスを改善するためにデータを提出する前に、クライアントの検証が実行されます。 3)サーバーとのリフレッシュレス通信は、AJAXテクノロジーを通じて達成されます。

JavaScriptエンジンが内部的にどのように機能するかを理解することは、開発者にとってより効率的なコードの作成とパフォーマンスのボトルネックと最適化戦略の理解に役立つためです。 1)エンジンのワークフローには、3つの段階が含まれます。解析、コンパイル、実行。 2)実行プロセス中、エンジンはインラインキャッシュや非表示クラスなどの動的最適化を実行します。 3)ベストプラクティスには、グローバル変数の避け、ループの最適化、constとletsの使用、閉鎖の過度の使用の回避が含まれます。


ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

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

SublimeText3 英語版
推奨: Win バージョン、コードプロンプトをサポート!

SublimeText3 Linux 新バージョン
SublimeText3 Linux 最新バージョン

WebStorm Mac版
便利なJavaScript開発ツール

mPDF
mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。
