【Javascript】イベントの泡立ちと捕獲伝達方式

20789 ワード

イベントには泡が発生して捕獲される2つの伝達方式があり、バブル伝達方式はまず内部要素のイベントをトリガし、後に外部要素のイベントをトリガし、キャプチャ伝達方式は逆である.
テストコードの例は以下の通りです.

<html>
    <head>
        <meta charset="utf-8">
        <title>     title>
    head>
    <style>
    .divTest {
		margin: 20px auto;
		width: 300px;
		height: 180px;
		border: 2px solid red;
	}
	.pTest {
		width: 100px;
		border: 2px solid green;
		cursor: pointer;
		margin-left: 75px;
		text-align: center;
	}
    style>
    <body>
        <div class="divTest" id="id1">
            <p class="pTest" id="bubbing1">
                  
            p>
        div>
        <div class="divTest" id="id2">
            <p class="pTest" id="bubbing2">
                    
            p>
        div>
        <div class="divTest" id="id3">
            <p class="pTest" id="capture1">
                  
            p>
        div>
        <div class="divTest" id="id4">
            <p class="pTest" id="capture2">
                    
            p>
        div>
        <script>
            //   
			var x = document.getElementById("id1");
			var y = document.getElementById("bubbing1");
			x.addEventListener('click', function () { alert("      -div"); }, false);
			y.addEventListener('click', function () { alert("      -p"); }, false);
			//     
			x = document.getElementById("id2");
			y = document.getElementById("bubbing2");
			x.addEventListener('click', function () { alert("      -div"); }, false);
			y.addEventListener('click', function (e) {
				alert("      -p,              ");
				stopBubble(e);
			}, false);

		    //   
			x = document.getElementById("id3");
			y = document.getElementById("capture1");
			x.addEventListener('click', function () { alert("      -div"); }, true);
			y.addEventListener('click', function () { alert("      -p"); }, true);
			//     
			x = document.getElementById("id4");
			y = document.getElementById("capture2");
			x.addEventListener('click', function (e) {
				alert("      -div,              ");
				stopBubble(e);
			}, true);
			y.addEventListener('click', function () { alert("      -p"); }, true);


			function stopBubble(e) {
				if (e && e.stopPropagation) {
					e.stopPropagation();
				} else {
					window.event.cancelBubble = true;
				}
			}
        script>
    body>
html>