|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
親divの要素内容です。
子供divの要素内容です。
孫divの要素内容です。
孫divの要素内容です。 をクリックすると、 孫要素のイベントリスナーです のアラートがでます。これで終わりかと思ったら、 子要素のイベントリスナーです のアラートが出て、 親要素のイベントリスナーです のアラートがでます。 孫をクリックしたら、イベントが孫から子供へそして親へ伝達されています。この伝達が、 <input type="checkbox" id='id1' value="3000" onclick="myfunc()">TWELITE Red 3,000円<br> や、 document.getElementById('btn').onclick = function(){ と との違いです。上記の2つは応答する関数が1つだけで伝達はありません。 以下ソースです。 <!DOCTYPE html>
<html>
<head>
<meta charset='UTF-8' />
<title>sample</title>
<script>
function load() {
document.getElementById('parent').addEventListener('click', function(){
window.alert('親要素のイベントリスナーです');
}, false);
document.getElementById('child').addEventListener('click', function(){
window.alert('子要素のイベントリスナーです');
}, false);
document.getElementById('grandchild').addEventListener('click', function(){
window.alert('孫要素のイベントリスナーです');
}, true);
}
document.addEventListener("DOMContentLoaded", load, false);
</script>
</head>
<body>
<div id="parent">
親divの要素内容です。
<div id="child">
子供divの要素内容です。
<div id="grandchild">
孫divの要素内容です。
</div>
</div>
</div>
</body>
</html>
addEventListener(type, listener, useCapture) useCaptureの値 孫をクリックした場合の伝達順序(3列)
孫はtrueでもfalseでも伝達に影響を与えません。 孫から親への伝達方向はバブリングフェーズといいます。 親から孫への伝達方向はキャプチャーフェーズといいます。 |