検索
ホームページウェブフロントエンドjsチュートリアルJQuery_jquery での DOM イベント バブリング例の分析

この記事では、例を通じて JQuery での DOM イベントのバブリングを分析します。皆さんの参考に共有してください。具体的な分析は次のとおりです。

バブリングとは

ページ上には複数のイベントが存在することがあり、複数の要素が同じイベントに応答することができます。 Web ページに 2 つの要素があり、1 つの要素がもう 1 つの要素内にネストされており、両方ともクリック イベントにバインドされているとします。同時に、クリック イベントも body 要素にバインドされています。

<div id="content">
  外层div元素
  <span>内层span元素</span>
  外层div元素
</div>

<script type="text/javascript">
$(function(){
  // 为span元素绑定click事件
  $('span').bind("click",function(){
    var txt = $('#msg').html() + "<p>内层span元素被点击.<p/>";
    $('#msg').html(txt);
  });
  // 为div元素绑定click事件
  $('#content').bind("click",function(){
   var txt = $('#msg').html() + "<p>外层div元素被点击.<p/>";
    $('#msg').html(txt);
  });
  // 为body元素绑定click事件
  $("body").bind("click",function(){
    var txt = $('#msg').html() + "<p>body元素被点击.<p/>";
    $('#msg').html(txt);
  });
})
</script>

内部のspan要素がクリックされた場合、つまりspan要素のクリックイベントがトリガーされた場合、3件のレコードが出力されます。内側のspan要素をクリックするだけで、外側のdiv要素とbody要素にバインドされたクリックイベントがトリガーされます。これはイベントのバブリングが原因で発生します。 scan 要素をクリックするときに、span 要素を含む要素 div と div 要素を含む要素 body もクリックすると、各要素は特定の順序でクリック イベントに応答します。

要素のクリック イベントは、次の順序で「バブル」します。

1.
2.


3.

バブリングと呼ばれる理由は、DOM の階層に従ってイベントがバブルのように上に上昇し続けるためです。

イベントのバブリングによって引き起こされる問題

イベントのバブリングは予期しない影響を引き起こす可能性があります。上記の例では、当初は 要素のクリック イベントのみをトリガーする必要がありましたが、

要素と 要素のクリック イベントも同時にトリガーされました。したがって、イベントの範囲を制限する必要があります。 要素がクリックされると、 要素のクリック イベントのみがトリガーされます。要素がクリックされると、
要素のクリック イベントのみがトリガーされます。 要素はトリガーされません。

イベントオブジェクト

IE-DOM と標準 DOM ではイベント オブジェクトの実装方法が異なるため、異なるブラウザーでイベント オブジェクトを取得することはより困難になります。この問題に対処するために、JQuery は必要な拡張機能とカプセル化を作成し、どのブラウザーでもイベント オブジェクトとイベント オブジェクトの一部のプロパティを簡単に取得できるようにしました。

プログラムでイベント オブジェクトを使用するのは非常に簡単です。jQuery コードは次のとおりです。

$("element").bind("click",function(event){ 
  //event : 事件对象 
  //... 
});

このように、「element」要素をクリックするとイベントオブジェクトが作成されます。このイベント オブジェクトには、イベント処理関数によってのみアクセスできます。イベント処理関数の実行後、イベント オブジェクトは破棄されます。

イベントのバブリングを停止

イベントのバブリングを停止すると、イベント内の他のオブジェクトのイベント ハンドラーが実行されなくなる可能性があります。イベントのバブリングを停止するために、JQuery には stopPropagation() メソッドが提供されています。

$(function(){
   // 为span元素绑定click事件
  $('span').bind("click",function(event){
    var txt = $('#msg').html() + "内层span元素被点击";
    $('#msg').html(txt);
    event.stopPropagation(); // 阻止事件冒泡
  });
})

要素をクリックすると、 要素のクリック イベントのみがトリガーされます。
要素のクリック イベントはトリガーされません。同じ方法を使用して、
要素のバブリング問題を解決できます。

$('#content').bind("click",function(event){ 
 var txt = $('#msg').html() + "<p>外层div元素被点击.<p/>"; 
 $('#msg').html(txt); 
 event.stopPropagation(); // 阻止事件冒泡 
});

このように、要素または
要素をクリックすると、対応するコンテンツのみが出力され、他のコンテンツは出力されません。

デフォルトの動作をブロック

Web ページ内の要素には独自のデフォルト動作があります。たとえば、ハイパーリンクをクリックするとジャンプし、「送信」ボタンをクリックするとフォームが送信されます。場合によっては、要素のデフォルト動作を防止する必要があります。

JQuery では、要素のデフォルト動作を防止するために、preventDefault() メソッドが提供されています。

たとえば、プロジェクトでは、「送信」ボタンをクリックすると、要素が必須フィールドであるかどうか、要素の長さが 6 文字であるかどうかなど、フォームの内容を検証する必要があることがよくあります。 、など。フォームが送信条件が満たされた場合にフォームの送信を禁止しない場合 (デフォルトの動作)。

<form action="test.html">
用户名:<input type="text" id="username" />
<br/>
<input type="submit" value="提交" id="sub"/>
</form>

$(function(){
 $("#sub").bind("click",function(event){
   var username = $("#username").val(); //获取元素的值
   if(username==""){ //判断值是否为空
      $("#msg").html("<p>文本框的值不能为空.</p>"); //提示信息
      event.preventDefault(); //阻止默认行为 ( 表单提交 )
     }
 })
})

ユーザー名が空の場合に「送信」ボタンをクリックすると、プロンプトが表示され、フォームを送信できません。フォームはユーザー名を入力した後にのみ送信できます。 PreventDefault() メソッドがフォームの送信を阻止できることがわかります。

イベント オブジェクトのバブリングとデフォルトの動作を同時に停止したい場合は、イベント処理関数で false を返すことができます。これは、イベント オブジェクトの stopPapagation() メソッドとPreventDefault() メソッドの両方を呼び出す簡略的な方法です。

フォームの例では、event.preventDefault() は次のように書き換えることができます: return false;

イベント バブリングの例で、event.stopPropaqation(); を return false;

のように書き換えることもできます。

イベントキャプチャ

イベント キャプチャとイベント バブリングは 2 つの相反するプロセスです。イベント キャプチャはトップダウンでトリガーされます。バブリング イベントの例として、要素のクリック イベントは次の順序でキャプチャされます。

1.
2.


3.

明らかに、イベントのキャプチャは最も外側の要素から始まり、次に最も内側の要素に向かって行われます。したがって、バインドされたクリック イベントは、最初に

要素に渡され、次に
要素に渡されます。

残念ながら、すべての主要なブラウザがイベント キャプチャをサポートしているわけではなく、この欠陥は JavaScript では修正できません。 JQuery はイベント キャプチャをサポートしていません。リーダーがイベント キャプチャを使用する必要がある場合は、ネイティブ JavaScript を直接使用してください。

この記事が皆さんの jQuery プログラミングに役立つことを願っています。

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
CおよびJavaScript:接続が説明しましたCおよびJavaScript:接続が説明しましたApr 23, 2025 am 12:07 AM

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

Webサイトからアプリまで:JavaScriptの多様なアプリケーションWebサイトからアプリまで:JavaScriptの多様なアプリケーションApr 22, 2025 am 12:02 AM

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

Python vs. JavaScript:ユースケースとアプリケーションと比較されますPython vs. JavaScript:ユースケースとアプリケーションと比較されますApr 21, 2025 am 12:01 AM

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

JavaScript通訳者とコンパイラにおけるC/Cの役割JavaScript通訳者とコンパイラにおけるC/Cの役割Apr 20, 2025 am 12:01 AM

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

JavaScript in Action:実際の例とプロジェクトJavaScript in Action:実際の例とプロジェクトApr 19, 2025 am 12:13 AM

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

JavaScriptとWeb:コア機能とユースケースJavaScriptとWeb:コア機能とユースケースApr 18, 2025 am 12:19 AM

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

JavaScriptエンジンの理解:実装の詳細JavaScriptエンジンの理解:実装の詳細Apr 17, 2025 am 12:05 AM

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

Python vs. JavaScript:学習曲線と使いやすさPython vs. JavaScript:学習曲線と使いやすさApr 16, 2025 am 12:12 AM

Pythonは、スムーズな学習曲線と簡潔な構文を備えた初心者により適しています。 JavaScriptは、急な学習曲線と柔軟な構文を備えたフロントエンド開発に適しています。 1。Python構文は直感的で、データサイエンスやバックエンド開発に適しています。 2。JavaScriptは柔軟で、フロントエンドおよびサーバー側のプログラミングで広く使用されています。

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

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

ホットツール

SublimeText3 中国語版

SublimeText3 中国語版

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

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser は、オンライン試験を安全に受験するための安全なブラウザ環境です。このソフトウェアは、あらゆるコンピュータを安全なワークステーションに変えます。あらゆるユーティリティへのアクセスを制御し、学生が無許可のリソースを使用するのを防ぎます。

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。

SublimeText3 Linux 新バージョン

SublimeText3 Linux 新バージョン

SublimeText3 Linux 最新バージョン