淘先锋技术网

首页 1 2 3 4 5 6 7

JavaScript冒泡顺序是指,当一个事件被触发后,该事件会从触发它的元素开始,逐级向上冒泡直到document对象(页面)被触发。在这个过程中,如果任何一个元素捕获到这个事件,那么事件便不会继续向上冒泡。

举个例子,如果有这样一个HTML结构:

<div id="outer">
<div id="middle">
<div id="inner">
</div>
</div>
</div>

并且给这三个div分别绑定了一个点击事件:

• var outer = document.querySelector('#outer');
outer.addEventListener('click',function(){
console.log('outer');
});
• var middle = document.querySelector('#middle');
middle.addEventListener('click',function(){
console.log('middle');
});
• var inner = document.querySelector('#inner');
middle.addEventListener('click',function(){
console.log('inner');
});

当我们点击最里层的inner元素时,按照冒泡顺序,依次输出的结果应该是:"inner" ->"middle" ->"outer"。

需要注意的是,由于JavaScript冒泡顺序是从子元素开始冒泡到父元素,如果在子元素上绑定了一个事件,同时父元素上也绑定了同一个事件,那么在父元素冒泡到该事件时,该事件依然会被触发。

例如:

• var outer = document.querySelector('#outer');
outer.addEventListener('click',function(){
console.log('outer');
});
• var middle = document.querySelector('#middle');
middle.addEventListener('click',function(){
console.log('middle');
});
• var inner = document.querySelector('#inner');
middle.addEventListener('click',function(){
console.log('inner');
});
• inner.addEventListener('click',function(){
console.log('inner clicked again');
});

当我们再次点击最里层的inner元素时,输出的结果将是:"inner" ->"inner clicked again" ->"middle" ->"outer"。

总结一下,JavaScript冒泡顺序是从子元素开始向父级元素逐层冒泡的。如果一个元素上绑定了同一个事件的多个回调函数,那么它们的执行顺序是按照它们被绑定的顺序执行的。如果一个元素上的事件被捕获,那么它就不会接着向上冒泡了。