在firefox下
有三个嵌套的div ,都绑定了click事件。
并且都设了 stoppropagation 阻止冒泡
并且都设了 允许 usecapture 允许捕捉现在我点击最内层的div后。为什么结果是最外层的div,捕获了呢?根据事件传播的途径,是先捕获的,应该说是,3个div都捕获到
如果不捕获到的话,至少内层的div 应该可以捕获到代码如下 非ie可用
<!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-Language" content="zh-cn" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>useCapture</title>
<style type="text/css">
#outDiv
{
    padding:10px 10px 10px 10px;
    border:1px solid red;
}#middleDiv
{
    padding:10px 10px 10px 10px;
    border:1px solid green;
}#inDiv
{
    padding:10px 10px 10px 10px;
    border:1px solid blue;
}
</style>
</head><body><div id="outDiv">
  <div id="middleDiv">
    <div id="inDiv">请在此点击鼠标。</div>
  </div>
</div><div id="info"></div><script language="javascript" type="text/javascript">
<!--
var outDiv = document.getElementById("outDiv");
var middleDiv = document.getElementById("middleDiv");
var inDiv = document.getElementById("inDiv");
var info = document.getElementById("info");
 
outDiv.addEventListener("click", function (e) { e.stopPropagation();info.innerHTML += "outDiv" + "<br>"; }, true);
middleDiv.addEventListener("click", function (e) {  e.stopPropagation();info.innerHTML += "middleDiv" + "<br>"; }, true);
inDiv.addEventListener("click", function (e) {  e.stopPropagation();info.innerHTML += "inDiv" + "<br>"; }, true);
//-->
</script></body></html>

解决方案 »

  1.   

    冒泡是最里层的向外层
    stopPropagation Firefox
    cancelBubble IE参考
    <!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" lang="gb2312">
    <head>
    <title> 阻止JavaScript事件冒泡传递(cancelBubble 、stopPropagation)</title>
    <meta name="keywords" content="JavaScript,事件冒泡,cancelBubble,stopPropagation" />
    <script type="text/javascript">
    function doSomething (obj,evt) {
    alert(obj.id);
    var e=(evt)?evt:window.event;//
    if (window.event) {
    e.cancelBubble=true;
    } else {
    //e.preventDefault();
    e.stopPropagation();
    }
    }
    </script>
    </head>
    <body>
    <div id="parent1" onclick="alert(this.id)" style="width:250px;background-color:yellow">
    <p>This is parent1 div.</p>
    <div id="child1" onclick="alert(this.id)" style="width:200px;background-color:orange">
    <p>This is child1.</p>
    </div>
    <p>This is parent1 div.</p>
    </div>
    <br />
    <div id="parent2" onclick="alert(this.id)" style="width:250px;background-color:cyan;">
    <p>This is parent2 div.</p>
    <div id="child2" onclick="doSomething(this,event);" style="width:200px;background-color:lightblue;">
    <p>This is child2. Will bubble.</p>
    </div>
    <p>This is parent2 div.</p>
    </div>
    </body>
    </html> 
      

  2.   

    首先你的目的是什么呢?你又要设置 3个包容的DIV阻止冒泡 同时又设置一起捕获现在得到的结果就是 规则的反应