JavaScript HTML DOM イベントリスナー
JavaScript HTML DOM EventListener
addEventListener() メソッド
ユーザーがボタンをクリックすると、リスニング イベントをトリガーします:
<!DOCTYPE html> <html> <meta charset="utf-8"> <body> <p>該實(shí)例使用 addEventListener() 方法在按鈕中添加點(diǎn)擊事件。 </p> <button id="myBtn">點(diǎn)我</button> <p id="demo"></p> <script> document.getElementById("myBtn").addEventListener("click", displayDate); function displayDate() { document.getElementById("demo").innerHTML = Date(); } </script> </body> </html>
addEventListener() メソッドは、指定された要素にイベント ハンドラーを追加するために使用されます。
addEventListener() メソッドによって追加されたイベント ハンドルは、既存のイベント ハンドルを上書きしません。
複數(shù)のイベント ハンドラーを要素に追加できます。
2 つの「クリック」イベントなど、同じタイプの複數(shù)のイベント ハンドラーを同じ要素に追加できます。
イベント リスナーは HTML 要素だけでなく、任意の DOM オブジェクトに追加できます。例: ウィンドウ オブジェクト。
addEventListener() メソッドを使用すると、イベント (バブリングとキャプチャ) の制御が簡(jiǎn)単になります。
addEventListener() メソッドを使用すると、JavaScript が HTML タグから分離されるため、HTML タグを制御せずにイベント リスナーを追加することもできます。
removeEventListener() メソッドを使用してイベント リスニングを削除できます。
構(gòu)文
element.addEventListener(event, function, useCapture);
最初のパラメータはイベントのタイプ(「クリック」や「マウスダウン」など)です。
2番目のパラメータはイベントの後に呼び出されます。関數(shù)がトリガーされます。
3 番目のパラメータは、イベントがバブリングしているかキャプチャしているかを説明するために使用されるブール値です。このパラメータはオプションです。
注: 「on」接頭辭は使用しないでください。 たとえば、「onclick」の代わりに「click」を使用します。
元の要素にイベント ハンドラーを追加します
ユーザーが要素をクリックすると、「Hello World!」がポップアップします:
<!DOCTYPE html> <html> <body> <p>該實(shí)例使用 addEventListener() 方法在按鈕中添加點(diǎn)擊事件。 </p> <button id="myBtn">點(diǎn)我</button> <script> document.getElementById("myBtn").addEventListener("click", function(){ alert("Hello World!"); }); </script> </body> </html>
関數(shù)名を使用して外部関數(shù)を參照できます:
ユーザーがクリックしたとき要素上で、「Hello World!」がポップアップ表示されます:
<!DOCTYPE html> <html> <meta charset="utf-8"> <body> <p>該實(shí)例使用 addEventListener() 方法在用戶點(diǎn)擊按鈕時(shí)執(zhí)行函數(shù)。</p> <button id="myBtn">點(diǎn)我</button> <script> document.getElementById("myBtn").addEventListener("click", myFunction); function myFunction() { alert ("Hello World!"); } </script> </body> </html>
同じ要素に複數(shù)のイベント ハンドラーを追加します
addEventListener() メソッドを使用すると、既存のイベントを上書きせずに同じ要素に複數(shù)のイベントを追加できます:
Instance
<!DOCTYPE html> <html> <meta charset="utf-8"> <body> <p>該實(shí)例使用 addEventListener() 方法向同個(gè)按鈕中添加兩個(gè)點(diǎn)擊事件。</p> <button id="myBtn">點(diǎn)我</button> <script> var x = document.getElementById("myBtn"); x.addEventListener("click", myFunction); x.addEventListener("click", someOtherFunction); function myFunction() { alert ("Hello World!") } function someOtherFunction() { alert ("函數(shù)已執(zhí)行!") } </script> </body> </html>
同じ要素に追加する さまざまな種類のイベント:
インスタンス
<!DOCTYPE html> <html> <meta charset="utf-8"> <body> <p>實(shí)例使用 addEventListener() 方法在同一個(gè)按鈕中添加多個(gè)事件。</p> <button id="myBtn">點(diǎn)我</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>實(shí)例在window對(duì)象中使用 addEventListener() 方法。</p> <p>嘗試重置瀏覽器的窗口觸發(fā) "resize" 事件句柄。</p> <p id="demo"></p> <script> window.addEventListener("resize", function(){ document.getElementById("demo").innerHTML = Math.random(); }); </script> </body> </html>
パラメータを渡します
パラメータ値を渡すとき、「匿名関數(shù)」を使用してパラメータ付きの関數(shù)を呼び出します:
インスタンス
<!DOCTYPE html> <html> <meta charset="utf-8"> <body> <p>實(shí)例演示了在使用 addEventListener() 方法時(shí)如何傳遞參數(shù)。</p> <p>點(diǎn)擊按鈕執(zhí)行計(jì)算。</p> <button id="myBtn">點(diǎn)我</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> 要素をクリックした場(chǎng)合、どの要素の「click」イベントが最初にトリガーされますか?
バブリングでは、內(nèi)部要素のイベントが最初にトリガーされ、次に外部要素がトリガーされます。つまり、<p> 要素の click イベントが最初にトリガーされ、次に <div> の click イベントがトリガーされます。 ; 要素がトリガーされます。
キャプチャでは、外部要素のイベントが最初にトリガーされ、次に內(nèi)部要素のイベントがトリガーされます。つまり、
addEventListener() メソッドは、「useCapture」パラメータを指定して配信タイプを設(shè)定できます:
addEventListener(event, function, useCapture);
デフォルト値は false で、値が true の場(chǎng)合はバブル配信になります。イベントではキャプチャ転送が使用されます。
<!DOCTYPE html> <html> <meta charset="utf-8"> <head> <style> div { background-color: coral; border: 1px solid; padding: 50px; } </style> </head> <body> <p>實(shí)例演示了在添加不同事件監(jiān)聽時(shí),冒泡與捕獲的不同。</p> <div id="myDiv"> <p id="myP">點(diǎn)擊段落,我是冒泡。</p> </div><br> <div id="myDiv2"> <p id="myP2">點(diǎn)擊段落,我是捕獲。 </p> </div> <script> document.getElementById("myP").addEventListener("click", function() { alert("你點(diǎn)擊了 P 元素!"); }, false); document.getElementById("myDiv").addEventListener("click", function() { alert(" 你點(diǎn)擊了 DIV 元素 !"); }, false); document.getElementById("myP2").addEventListener("click", function() { alert("你點(diǎn)擊了 P 元素!"); }, true); document.getElementById("myDiv2").addEventListener("click", function() { alert("你點(diǎn)擊了 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 事件句柄,鼠標(biāo)在桔紅色的框內(nèi)移動(dòng)時(shí)會(huì)顯示隨機(jī)數(shù)。 <p>點(diǎn)擊按鈕移除 DIV 的事件句柄。</p> <button onclick="removeHandler()" id="myBtn">點(diǎn)我</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>
ブラウザ サポート
表內(nèi)の番號(hào)は、このメソッドをサポートする最初のブラウザのバージョン番號(hào)を示します。
メソッド
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() メソッドを使用してイベント ハンドルを削除できます。
クロスブラウザ ソリューション: