ホームページ ウェブフロントエンド jsチュートリアル JSイベントバインディング、イベントリスニング、イベントデリゲーションの間のコンテンツの簡単な分析

JSイベントバインディング、イベントリスニング、イベントデリゲーションの間のコンテンツの簡単な分析

Aug 23, 2018 pm 03:01 PM
イベントの代表団 イベントリスニング イベントバインディング

この記事の内容は、js イベントのバインディングとイベントの監視とイベントの委任に関する簡単な分析です。必要な方は参考にしていただければ幸いです。

1. イベント バインディング
JavaScript がユーザー操作に応答できるようにするには、まずイベント処理関数を DOM 要素にバインドする必要があります。いわゆるイベント処理機能は、ユーザの操作を処理する機能であり、操作ごとに名称が異なります。
イベントをバインドするには 3 つの一般的に使用される方法があります:
(1) DOM でイベントを直接バインドします
DOM 要素、onkeyup、onkeyup、onkeyup、onkeyup、onkeyup、onkeyup、onkeyup、onkeyup、onkeyup、onkeyup、等

<input type="button" value="click me" onclick="hello()"><script>
function hello(){
    alert("hello world!");
}
</script>
ログイン後にコピー

(2) JavaScript コードのバインディング イベント
JavaScript コード (つまり、script タグ内) のバインディング イベントにより、JavaScript コードを HTML タグから分離できるため、ドキュメントの構造が明確になり、管理と開発が容易になります。

<input type="button" value="click me" id="btn"><script>
document.getElementById("btn").onclick = function(){
    alert("hello world!");
}
</script>
ログイン後にコピー

(3) イベント リスニングを使用してイベントをバインドする
イベントをバインドする別の方法は、addEventListener() またはattachEvent() を使用してイベント リスニング関数をバインドすることです。
イベント監視
イベント監視に関して、W3C 仕様では、キャプチャ ステージ、ターゲット ステージ、バブリング ステージの 3 つのイベント ステージが定義されています。
W3C 仕様

element.addEventListener(event, function, useCapture)
ログイン後にコピー

event: (必須) イベント名。すべての DOM イベントをサポートします。
function: (必須) イベントがトリガーされたときに実行される関数を指定します。
useCapture: (オプション) イベントがキャプチャフェーズで実行されるかバブリングフェーズで実行されるかを指定します。本当です、捕獲します。偽り、バブル。デフォルトは false です。

<input type="button" value="click me" id="btn1"><script>
document.getElementById("btn1").addEventListener("click",hello);
function hello(){
    alert("hello world!");
}
</script>
ログイン後にコピー

IE標準

element.attachEvent(event, function)
ログイン後にコピー

event:(必須)イベントタイプ。 「on」を追加する必要があります (例: onclick)。
function: (必須) イベントがトリガーされたときに実行される関数を指定します。

<input type="button" value="click me" id="btn2"><script>
document.getElementById("btn2").attachEvent("onclick",hello);
function hello(){
    alert("hello world!");
}
</script>
ログイン後にコピー

イベント監視の利点
1. 複数のイベントをバインドできます。
通常のイベント バインドでは、最後にバインドされたイベントのみが実行されます。イベント リスナーは複数の関数を実行できます。

<input type="button" value="click me" id="btn4"><script>
var btn4 = document.getElementById("btn4");
btn4.addEventListener("click",hello1);
btn4.addEventListener("click",hello2);
function hello1(){
    alert("hello 1");
}
function hello2(){
    alert("hello 2");
}
</script>
ログイン後にコピー

2. 対応する

<input type="button" value="click me" id="btn5"><script>
var btn5 = document.getElementById("btn5");
btn5.addEventListener("click",hello1);//执行了
btn5.addEventListener("click",hello2);//不执行
btn5.removeEventListener("click",hello2);
function hello1(){
    alert("hello 1");
}
function hello2(){
    alert("hello 2");
}
</script>
ログイン後にコピー

カプセル化されたイベントモニタリング

<input type="button" value="click me" id="btn5">//绑定监听事件
function addEventHandler(target,type,fn){
    if(target.addEventListener){
        target.addEventListener(type,fn);
    }else{
        target.attachEvent("on"+type,fn);
    }
}//移除监听事件
function removeEventHandler(target,type,fn){
    if(target.removeEventListener){
        target.removeEventListener(type,fn);
    }else{
        target.detachEvent("on"+type,fn);
    }
}
ログイン後にコピー

イベントキャプチャ: イベントキャプチャは、ドキュメントからイベントをトリガーするノードまでのプロセス、つまりトップダウントリガーを指します。イベントの
イベントバブリング: はイベントのボトムアップトリガーです。バインドされたイベント メソッドの 3 番目のパラメーターは、イベント トリガー シーケンスがイベント キャプチャであるかどうかを制御します。 true、イベントキャプチャ、false、イベントバブリング。デフォルトは false で、イベントがバブルアップすることを意味します。

<p id="parent">
  <p id="child" class="child"></p>
</p>

document.getElementById("parent").addEventListener("click",function(e){
                alert("parent事件被触发,"+this.id);
            })
            document.getElementById("child").addEventListener("click",function(e){
                alert("child事件被触发,"+this.id)
            })

child事件被触发,child
parent事件被触发,parent
ログイン後にコピー

結論: まず子供、次に親。イベントは内側から外側に向かって順番にトリガーされます。これをイベント バブリングと呼びます。
ここで、3 番目のパラメーターの値を true に変更します。

document.getElementById("parent").addEventListener("click",function(e){
                alert("parent事件被触发,"+e.target.id);
            },true)
            document.getElementById("child").addEventListener("click",function(e){
                alert("child事件被触发,"+e.target.id)
            },true)parent事件被触发,parentchild事件被触发,child
ログイン後にコピー

結論: 最初に親、次に子。イベントトリガーの順序が外側から内側、つまりイベントキャプチャに変更されます。

イベントのバブリングを防ぎ、デフォルトのイベントを防ぐ:
event.stopPropagation() メソッド: これは、イベントのバブリングを防ぎ、イベントがドキュメントに広がるのを防ぐメソッドですが、デフォルトのイベントは、この方法を使用する場合、接続をクリックすると、接続は引き続き開かれます。
event.preventDefault() メソッド: このメソッドを呼び出すと、接続は開かれませんが、バブリングが発生し、そのバブリングが親要素に渡されます。前のレイヤー
return false : このメソッドは、イベントのバブリングを防ぎ、デフォルトのイベントを防ぎます。このコードを書くと、接続は開かれず、イベントは上の親要素に渡されません。これは、event.stopPropagation() と events.preventDefault() を同時に呼び出すことと同じです

イベントの委任は、バブリングの原理を使用してイベントを追加します。実行効果をトリガーする親要素または祖先要素。

<input type="button" value="click me" id="btn6">
var btn6 = document.getElementById("btn6");
document.onclick = function(event){    
event = event || window.event;    
var target = event.target || event.srcElement;    
if(target == btn6){
        alert(btn5.value);
    }
}
ログイン後にコピー

イベント委任の利点 1. JavaScript のパフォーマンスを向上させます。イベント委任により、イベントの処理速度が大幅に向上し、メモリ使用量が削減されます

<ul id="list">
  <li id="item1" >item1</li>
  <li id="item2" >item2</li>
  <li id="item3" >item3</li></ul><script>
  var item1 = document.getElementById("item1");
  var item2 = document.getElementById("item2");
  var item3 = document.getElementById("item3");

document.addEventListener("click",function(event){
    var target = event.target;    
    if(target == item1){
        alert("hello item1");
    }else if(target == item2){
        alert("hello item2");
    }else if(target == item3){
        alert("hello item3");
    }
})</script>
ログイン後にコピー

2. 要素の変更によってイベント バインディングを変更することなく、DOM 要素を動的に追加します。

<ul id="list">
  <li id="item1" >item1</li>
  <li id="item2" >item2</li>
  <li id="item3" >item3</li></ul><script>var list = document.getElementById("list");

document.addEventListener("click",function(event){
    var target = event.target;    
    if(target.nodeName == "LI"){
        alert(target.innerHTML);
    }
})
var node=document.createElement("li");
var textnode=document.createTextNode("item4");
node.appendChild(textnode);
list.appendChild(node);
</script>
ログイン後にコピー
関連する推奨事項:

jquery の on() バインディング イベントと off() アンバインド イベントについての簡単な説明

JavaScript イベント バインディングの一般的な方法とその利点と欠点の分析についての簡単な説明

以上がJSイベントバインディング、イベントリスニング、イベントデリゲーションの間のコンテンツの簡単な分析の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホット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 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

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

SublimeText3 中国語版

SublimeText3 中国語版

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

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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

jqueryでイベントをバインドする方法は何通りありますか? jqueryでイベントをバインドする方法は何通りありますか? Nov 09, 2020 pm 03:30 PM

jquery でイベントをバインドするには、bind()、live()、delegate()、および on() メソッドの 4 つの方法があります。bind() メソッドはイベントを既存の要素にのみバインドできますが、 live() )、on () および delegate() はすべて、今後新しく追加される要素のイベント バインディングをサポートします。

UniApp エラーの問題を解決します:「xxx」イベントがバインドされていません UniApp エラーの問題を解決します:「xxx」イベントがバインドされていません Nov 25, 2023 am 10:56 AM

UniApp を使用してアプリケーションを開発するときに、次のエラー メッセージが表示される場合があります。「xxx」イベントがバインドされていません。これは UniApp のイベント バインディング メカニズムが原因で発生するため、この問題を解決するにはこのメカニズムを正しく設定する必要があります。 1. 問題の原因 UniApp では、ページコンポーネントのイベントバインディングは v-on 命令によって完了します。たとえば、テンプレートにボタン コンポーネントを追加します: &lt;button@click="onClick"&gt;Click Me&lt;/butto

イベントの勃発を効果的に防ぐ方法 イベントの勃発を効果的に防ぐ方法 Feb 19, 2024 pm 08:25 PM

イベント バブリングを効果的に防ぐには、具体的なコード サンプルが必要です。イベント バブリングとは、要素上のイベントがトリガーされると、親要素も同じイベント トリガーを受け取ることを意味します。このイベント配信メカニズムは、Web 開発に問題を引き起こすことがあります。問題があるため、イベントの沸騰を効果的に止める方法を学ぶ必要があります。 JavaScript では、イベント オブジェクトの stopPropagation() メソッドを使用して、イベントのバブリングを停止できます。このメソッドをイベント ハンドラー内で呼び出して、イベントが親要素に伝播するのを停止できます。

JavaScriptとTencent Mapsを利用したマップイベント監視機能を実装 JavaScriptとTencent Mapsを利用したマップイベント監視機能を実装 Nov 21, 2023 pm 04:10 PM

申し訳ありませんが、完全なコード例を提供することはできません。ただし、参考として基本的なアイデアとサンプル コード スニペットを提供できます。以下は、JavaScript と Tencent Map を組み合わせてマップ イベント監視機能を実装する簡単な例です。 //Tencent Map の API の紹介 constscript=document.createElement('script');script.src='https://map.

要素にイベントを追加するにはどうすればよいですか? JS バインディング イベントを解析する 3 つの方法 要素にイベントを追加するにはどうすればよいですか? JS バインディング イベントを解析する 3 つの方法 Aug 04, 2022 pm 07:27 PM

JavaScript はスクリプト言語として、ページ上の要素にイベントをバインドできるため、指定されたイベントが発生すると、対応するイベント ハンドラーを自動的に呼び出してイベントを処理できます。では、要素にイベントを追加するにはどうすればよいでしょうか?次の記事では、JS でイベントをバインドする 3 つの方法を紹介します。

jqueryバインディングイベントの機能は何ですか jqueryバインディングイベントの機能は何ですか Mar 20, 2023 am 10:52 AM

jqueryバインディングイベントの機能: 通常のイベントをDOMノードにバインドする DOMノードが選択されている場合、イベントをそれにバインドして、ユーザーが対応する操作を提供しやすくします。 jQuery には、bind、live、delegate、on という 4 つのイベント バインディング メソッドが用意されており、対応するアンリスニング関数は unbind、die、undelegate、off です。

jQuery イベント バインディング テクノロジの詳細な説明 jQuery イベント バインディング テクノロジの詳細な説明 Feb 26, 2024 pm 07:36 PM

jQuery は、Web ページでの対話性を処理するために広く使用されている人気のある JavaScript ライブラリです。中でもイベント バインディングは jQuery の重要な機能の 1 つであり、イベント バインディングを通じてユーザー インタラクションへの応答を実現します。この記事では、jQuery イベント バインディング テクノロジについて説明し、具体的なコード例を示します。 1. イベント バインディングの基本概念 イベント バインディングとは、特定のイベントが発生したときに指定された操作を実行するために、DOM 要素にイベント リスナーを追加することを指します。 jQuery で、目的の

Vue アプリケーションで「クリック」イベント バインディングが無効な場合はどうすればよいですか? Vue アプリケーションで「クリック」イベント バインディングが無効な場合はどうすればよいですか? Jun 24, 2023 pm 03:51 PM

Vue は、最新の Web アプリケーションを構築するための人気のある JavaScript フレームワークです。 Vue では通常、ディレクティブを使用して DOM 要素を操作します。その中でも「クリック」イベントはよく使われる命令の一つですが、Vue アプリケーションでは「クリック」イベントのバインディングが無効になる状況によく遭遇します。この記事では、この問題を解決する方法について説明します。要素が存在するかどうかを確認する最初のステップは、「クリック」イベントをバインドする要素が存在するかどうかを確認することです。要素が存在しない場合は、

See all articles