日期:2014-05-16  浏览次数:20322 次

javascript取消事件冒泡
关于event.cancelBubble

    由于HTML中的对象都是层次结构,比如一个Table包含了多个TR,一个TR包含了多个TD ,Bubble就是一个事件可以从子节点向父节点传递,比如鼠标点击了一个TD,当前的event.srcElement就是这个TD,但是这种冒泡机制使你可以从TR或者Table处截获这个点击事件,但是如果你event.cancelBubble,则就不能上传事件。

    取消事件冒泡,在 IE 的事件机制中,触发事件会从子元素向父元素逐级上传,就是说,如果子元素触发了单击事件,那么也会触发父元素的单击事件;event.cancelBubble=true;可以停止事件继续上传补充一点,Ie的事件传递是从下到上的:

事件来源对象->上级对象->上上级对象->.....->body->document->window

NS的事件传递是从上到下:

window->document->body->....->事件来源对象

实例函数:
<html>
<head>
<meta charset="utf-8">
</head>
<body>
<div id="testnodes">
<ul class = "links" >
<li>Home</li>
<li>About</li>
</ul>
</div>
<div>test</div>
<script type="text/javascript">
var all = document.getElementsByTagName("*");
for( var i = 0; i < all.length; i++ ) {
all[i].onmouseover = function(e) {
this.style.border = "1px solid red ";
stopBubble(e);
}

all[i].onmouseout = function(e) {
this.style.border = "0px";
stopBubble(e);
}
}

function stopBubble(e) {
                        // 如果传入了事件对象,那么就是非IE浏览器
if(e && e.stopPropagation )
   e.stopPropagation();
else
                           //否则,就采用IE的方式来取消事件冒泡
   window.event.cancelBubble = true;
}
  </script>
</body>
</html>