看下面的例子
<style> div { padding: 20px; width: 300px; height: 300px; background-color: greenyellow; } section { padding: 10px; width: 200px; height: 200px; background-color: yellow; } p { padding: 10px; width: 100px; height: 100px; background-color: red; } span { border: 1px solid #ccc; } </style> <div onclick="dHnadle()"> <section onclick="sHnadle()"> <p onclick="pHnadle()"> <span onclick="spanHnadle()"> 文本 </span> </p> </section> </div> var d = document.querySelector('div') var s = document.querySelector('section') var p = document.querySelector('p') var span = document.querySelector('span') function dHnadle() { console.log('div被触发') } function sHnadle() { console.log('section被触发') } function pHnadle() { console.log('p被触发') } function spanHnadle() { console.log('span被触发') } function dHnadle() { console.log('div被触发') } // addEventListener判断是否是在捕获阶段执行,默认是false,即冒泡阶段执行。 true表示捕获阶段 s.addEventListener('click', function() { console.log('section被触发,在冒泡阶段2') }) s.addEventListener( 'click', function() { console.log('section被触发,在冒泡阶段') }, false ) s.addEventListener( 'click', function() { console.log('section被触发 ,在捕获阶段执行') }, true ) // 事件源阶段,跟tue,false无关,只跟书写的先后顺序有关。 span.addEventListener( 'click', function() { console.log('span触发,在冒泡阶段执行') // event.stopImmediatePropagation() //立即停止,会停止整个事件的传播流程,包括在这个事件上的传播流程 // event.stopPropagation() //停止,停止后续的传播,在当前标签上的传播会执行完毕 }, true ) span.addEventListener( 'click', function() { console.log('span触发,在捕获阶段执行') }, false ) </scrpt>点击span标签,结果显示 stopImmediatePropagation() //立即停止,会停止整个事件的传播流程,包括在这个事件上的传播流程
给span加上阻止事件冒泡 span.addEventListener( 'click', function(event) { console.log('span触发,在冒泡阶段执行') event.stopImmediatePropagation() //立即停止,会停止整个事件的传播流程,包括在这个事件上的传播流程 }, true ) span.addEventListener( 'click', function() { console.log('span触发,在捕获阶段执行') }, false )结果显示: stopPropagation() //停止,停止后续的传播,在当前标签上的传播会执行完毕
// 事件源阶段,跟tue,false无关,只跟书写的先后顺序有关。 span.addEventListener( 'click', function(event) { console.log('span触发,在冒泡阶段执行') event.stopPropagation() //停止,停止后续的传播,在当前标签上的传播会执行完毕 }, true ) span.addEventListener( 'click', function() { console.log('span触发,在捕获阶段执行') }, false )结果显示: