JavaScript HTML DOM EventListener
addEventListener() メソッド
ユーザーがボタンをクリックすると、リスニング イベントをトリガーします:
<!DOCTYPE html> <html> <meta charset="utf-8"> <body> <p>该实例使用 addEventListener() 方法在按钮中添加点击事件。 </p> <button id="myBtn">点我</button> <p id="demo"></p> <script> document.getElementById("myBtn").addEventListener("click", displayDate); function displayDate() { document.getElementById("demo").innerHTML = Date(); } </script> </body> </html>
addEventListener() メソッドは、指定された要素にイベント ハンドラーを追加するために使用されます。
addEventListener() メソッドによって追加されたイベント ハンドルは、既存のイベント ハンドルを上書きしません。
複数のイベント ハンドラーを要素に追加できます。
2 つの「クリック」イベントなど、同じタイプの複数のイベント ハンドラーを同じ要素に追加できます。
イベント リスナーは HTML 要素だけでなく、任意の DOM オブジェクトに追加できます。例: ウィンドウ オブジェクト。
addEventListener() メソッドを使用すると、イベント (バブリングとキャプチャ) の制御が簡単になります。
addEventListener() メソッドを使用すると、JavaScript が HTML タグから分離されるため、HTML タグを制御せずにイベント リスナーを追加することもできます。
removeEventListener() メソッドを使用してイベント リスニングを削除できます。
構文
element.addEventListener(event, function, useCapture);
最初のパラメータはイベントのタイプ(「クリック」や「マウスダウン」など)です。
2番目のパラメータはイベントの後に呼び出されます。関数がトリガーされます。
3 番目のパラメータは、イベントがバブリングしているかキャプチャしているかを説明するために使用されるブール値です。このパラメータはオプションです。
注: 「on」接頭辞は使用しないでください。 たとえば、「onclick」の代わりに「click」を使用します。
元の要素にイベント ハンドラーを追加します
ユーザーが要素をクリックすると、「Hello World!」がポップアップします:
<!DOCTYPE html> <html> <body> <p>该实例使用 addEventListener() 方法在按钮中添加点击事件。 </p> <button id="myBtn">点我</button> <script> document.getElementById("myBtn").addEventListener("click", function(){ alert("Hello World!"); }); </script> </body> </html>
関数名を使用して外部関数を参照できます:
ユーザーがクリックしたとき要素上で、「Hello World!」がポップアップ表示されます:
<!DOCTYPE html> <html> <meta charset="utf-8"> <body> <p>该实例使用 addEventListener() 方法在用户点击按钮时执行函数。</p> <button id="myBtn">点我</button> <script> document.getElementById("myBtn").addEventListener("click", myFunction); function myFunction() { alert ("Hello World!"); } </script> </body> </html>
同じ要素に複数のイベント ハンドラーを追加します
addEventListener() メソッドを使用すると、既存のイベントを上書きせずに同じ要素に複数のイベントを追加できます:
Instance
<!DOCTYPE html> <html> <meta charset="utf-8"> <body> <p>该实例使用 addEventListener() 方法向同个按钮中添加两个点击事件。</p> <button id="myBtn">点我</button> <script> var x = document.getElementById("myBtn"); x.addEventListener("click", myFunction); x.addEventListener("click", someOtherFunction); function myFunction() { alert ("Hello World!") } function someOtherFunction() { alert ("函数已执行!") } </script> </body> </html>
同じ要素に追加する さまざまな種類のイベント:
インスタンス
<!DOCTYPE html> <html> <meta charset="utf-8"> <body> <p>实例使用 addEventListener() 方法在同一个按钮中添加多个事件。</p> <button id="myBtn">点我</button> <p id="demo"></p> <script> var x = document.getElementById("myBtn"); x.addEventListener("mouseover", myFunction); x.addEventListener("click", mySecondFunction); x.addEventListener("mouseout", myThirdFunction); function myFunction() { document.getElementById("demo").innerHTML += "Moused over!<br>" } function mySecondFunction() { document.getElementById("demo").innerHTML += "Clicked!<br>" } function myThirdFunction() { document.getElementById("demo").innerHTML += "Moused out!<br>" } /script> </body> </html>
Window オブジェクトにイベント ハンドラーを追加する
addEventListener() メソッドを使用すると、HTML 要素、HTML ドキュメント、ウィンドウ オブジェクトなどの HTML DOM オブジェクトにイベント リスナーを追加できます。または、xmlHttpRequest オブジェクトなどの他の支出イベント オブジェクト。
ユーザーがウィンドウサイズをリセットするときにイベントリスナーを追加します:
<!DOCTYPE html> <html> <meta charset="utf-8"> <body> <p>实例在window对象中使用 addEventListener() 方法。</p> <p>尝试重置浏览器的窗口触发 "resize" 事件句柄。</p> <p id="demo"></p> <script> window.addEventListener("resize", function(){ document.getElementById("demo").innerHTML = Math.random(); }); </script> </body> </html>
パラメータを渡します
パラメータ値を渡すとき、「匿名関数」を使用してパラメータ付きの関数を呼び出します:
インスタンス
<!DOCTYPE html> <html> <meta charset="utf-8"> <body> <p>实例演示了在使用 addEventListener() 方法时如何传递参数。</p> <p>点击按钮执行计算。</p> <button id="myBtn">点我</button> <p id="demo"></p> <script> var p1 = 5; var p2 = 7; document.getElementById("myBtn").addEventListener("click", function() { myFunction(p1, p2); }); function myFunction(a, b) { var result = a * b; document.getElementById("demo").innerHTML = result; } </script> </body> </html>
イベントバブリングまたはイベントキャプチャ?
イベント配信にはバブリングとキャプチャという 2 つの方法があります。
イベント配信は、要素イベントが発生する順序を定義します。 <p> 要素を <div> 要素に挿入し、ユーザーが <p> 要素をクリックした場合、どの要素の「click」イベントが最初にトリガーされますか?
バブリングでは、内部要素のイベントが最初にトリガーされ、次に外部要素がトリガーされます。つまり、<p> 要素の click イベントが最初にトリガーされ、次に <div> の click イベントがトリガーされます。 ; 要素がトリガーされます。
キャプチャでは、外部要素のイベントが最初にトリガーされ、次に内部要素のイベントがトリガーされます。つまり、
addEventListener() メソッドは、「useCapture」パラメータを指定して配信タイプを設定できます:
addEventListener(event, function, useCapture);
デフォルト値は false で、値が true の場合はバブル配信になります。イベントではキャプチャ転送が使用されます。
<!DOCTYPE html> <html> <meta charset="utf-8"> <head> <style> div { background-color: coral; border: 1px solid; padding: 50px; } </style> </head> <body> <p>实例演示了在添加不同事件监听时,冒泡与捕获的不同。</p> <div id="myDiv"> <p id="myP">点击段落,我是冒泡。</p> </div><br> <div id="myDiv2"> <p id="myP2">点击段落,我是捕获。 </p> </div> <script> document.getElementById("myP").addEventListener("click", function() { alert("你点击了 P 元素!"); }, false); document.getElementById("myDiv").addEventListener("click", function() { alert(" 你点击了 DIV 元素 !"); }, false); document.getElementById("myP2").addEventListener("click", function() { alert("你点击了 P 元素!"); }, true); document.getElementById("myDiv2").addEventListener("click", function() { alert("你点击了 DIV 元素 !"); }, true); </script> </body> </html>
removeEventListener() メソッド
removeEventListener() メソッドは、addEventListener() メソッドによって追加されたイベント ハンドラーを削除します。
<!DOCTYPE html> <html> <meta charset="utf-8"> <head> <style> #myDIV { background-color: coral; border: 1px solid; padding: 50px; color: white; } </style> </head> <body> <div id="myDIV"> div 元素添加了 onmousemove 事件句柄,鼠标在桔红色的框内移动时会显示随机数。 <p>点击按钮移除 DIV 的事件句柄。</p> <button onclick="removeHandler()" id="myBtn">点我</button> </div> <p id="demo"></p> <script> document.getElementById("myDIV").addEventListener("mousemove", myFunction); function myFunction() { document.getElementById("demo").innerHTML = Math.random(); } function removeHandler() { document.getElementById("myDIV").removeEventListener("mousemove", myFunction); } </script> </body> </html>
ブラウザ サポート
表内の番号は、このメソッドをサポートする最初のブラウザのバージョン番号を示します。
メソッド
addEventListener() 1.0 9.0 1.0 1.0 7.0
removeEventListener() 1.0 9.0 1.0 1.0 7.0
注: IE IE 8 以前のバージョン、Opera 7.0 以前のバージョンはサポートされていません。 ) メソッドとremoveEventListener()メソッド。ただし、このタイプのブラウザ バージョンでは、detachEvent() メソッドを使用してイベント ハンドルを削除できます。
クロスブラウザ ソリューション: