本文实例为大家分享了js事件的传播,供大家参考,具体内容如下
<Meta charset="UTF-8">
<script type="text/javascript">
function bind(obj,eventStr,callback){
if(obj.addEventListener){
//如果是正常浏览器
obj.addEventListener(eventStr,callback,false);
}else{
//IE8
obj.attachEvent("on"+eventStr,function(){
callback.call(obj);
});
}
}
window.onload = function(){
/*
* 事件的传播
* - 关于事件的传播微软和网景公司有着不同的理解
* - 微软公司,认为事件应该是从后代元素向祖先元素传播,即从里向外传播,也就是我们所谓事件的冒泡
* - 网景公司,认为事件应该是从祖先元素向后代元素传播,即从外向里传播,这一阶段我们称为事件的捕获
* - W3C综合了两个公司的方案,将事件的传播分成了三个阶段
* 1.捕获阶段
* - 事件从最外层的元素(document),向目标元素进行事件的捕获
* - 此阶段默认不会触发事件
* 2.目标阶段
* - 目标指的是触发事件的元素,捕获到目标元素则捕获阶段停止
* 3.冒泡阶段
* - 事件从目标元素向祖先元素中冒泡,此时开始触发事件
* - 默认事件都是在冒泡阶段执行的
*
* - 事件都是默认在冒泡阶段执行的,一般不需要在捕获阶段触发事件,
* 如果希望在捕获阶段执行事件,则需要将addEventListener()的第三个参数<a href="https://www.jb51.cc/tag/xiugai/" target="_blank" class="keywords">修改</a>为true
*
* - IE8及以下的浏览器没有捕获阶段,也不能设置在捕获阶段触发事件
*/
//分别为三个div绑定单击响应<a href="https://www.jb51.cc/tag/hanshu/" target="_blank" class="keywords">函数</a>
var <a href="https://www.jb51.cc/tag/Box/" target="_blank" class="keywords">Box</a>1 = document.getElementById("<a href="https://www.jb51.cc/tag/Box/" target="_blank" class="keywords">Box</a>1");
var <a href="https://www.jb51.cc/tag/Box/" target="_blank" class="keywords">Box</a>2 = document.getElementById("<a href="https://www.jb51.cc/tag/Box/" target="_blank" class="keywords">Box</a>2");
var <a href="https://www.jb51.cc/tag/Box/" target="_blank" class="keywords">Box</a>3 = document.getElementById("<a href="https://www.jb51.cc/tag/Box/" target="_blank" class="keywords">Box</a>3");
bind(<a href="https://www.jb51.cc/tag/Box/" target="_blank" class="keywords">Box</a>1,"click",function(){
alert(1);
})
bind(<a href="https://www.jb51.cc/tag/Box/" target="_blank" class="keywords">Box</a>2,function(){
alert(2);
})
bind(<a href="https://www.jb51.cc/tag/Box/" target="_blank" class="keywords">Box</a>3,function(){
alert(3);
})
};