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

js中冒泡和捕获阶段的差异
<script type="text/javascript">
window.onload = function() {
var div = document.getElementsByTagName('div')[0];
var el = document.getElementById('pp');
var handler=function(e){
var target = e.Target;
alert(target.tagName);
};
el.addEventListener('click', handler, true);
div.addEventListener('click', handler, true);
};

</script>
</head>
<body>
<div style="border: 1px red solid; width: 200px; height: 300px">
<p id="pp" style="border: 1px blue solid;">这是一段中的内容</p>
<span style="border: 1px blue solid;">这是二段中的内容</span>
</div>
</body>

这儿给div 和p添加相同的事件和处理函数,addEventListener第三个参数useCapture无论是false还是true,当点击p时,为什么p注册的监听器会运行两次,都是弹出P, span没有监听器当点击时监听器也运行,弹出SPAN,这是怎么回事????
冒泡和捕获

------解决方案--------------------
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>无标题文档</title>
<script type="text/javascript">
function handler(e){
var target = e.currentTarget;
alert(target.tagName);
};
window.onload = function() {
var div = document.getElementsByTagName('div')[0];
var el = document.getElementById('pp');
el.addEventListener('click', handler, false);
div.addEventListener('click', handler, false);
};

</script>
</head>


<body>
<div style="border: 1px red solid; width: 200px; height: 300px">
<p id="pp" style="border: 1px blue solid;">这是一段中的内容</p>
<span style="border: 1px blue solid;">这是二段中的内容</span>
</div>
</body>
</html>
改成这样试试 把false改成true就看出来了