<!DOCTYPE html>
<html>
<head>
   <script type="text/javascript" src="test.js"></script>

</head>
<body>
<script type="text/javascript">
function addEventSimple(obj,evt,fn) {
if (obj.addEventListener)
obj.addEventListener(evt,fn,false);//冒泡
else if (obj.attachEvent)
obj.attachEvent('on'+evt,fn);
}
function test(){
alert('sese');
 return false;
}
//addEventSimple(document,'click',test);
document.onclick = test;
 </script>
 <a href ='http://www.sina.com'>sina </a>
</body></html>上面这段代码当用传统事件注册事件时,你点击超链接是不会访问到sina的!我分析的原因是当你点击超链接时,document捕获了onclick 事件 就触发了test 函数,因为函数返回false 所以a的默认行为被阻止 了
因此不能访问sina 
但这也有一个疑问,test函数仅仅取消浏览器对a 的默认行为,但click事件还会继续传播,最后还是会到元素a,点击事件还是会传播到a,为什么a会没反应呢 2 :当我用w3c 事件模型时,也就是把document.onclick = test;注释掉,//addEventSimple(document,'click',test);注释取消不管理我在obj.addEventListener(evt,fn,false);//冒泡
把第三个参数改成true or false 时,事件还是会传播到a,能访问到sina 这是为什么如果按照我1分析的结论,当冒泡时,就应该不能访问sina 才对大家帮忙分析下 谢谢!

解决方案 »

  1.   

    function addEventSimple(obj,evt,fn) {
            if (obj.addEventListener)
                obj.addEventListener(evt,fn,false);//冒泡
        else if (obj.attachEvent)
                obj.attachEvent('on'+evt,fn);
        }
    不是冒泡吧 这个是在fireFox 中注册事件
    下面个是在ie中注册事件
      

  2.   

    false 是冒泡 true 是捕获  这不是w3c的事件模型吗!!
      

  3.   

    obj.addEventListener(evt,fn,false);//冒泡这个不是冒泡
    addEventListener是事件监听第3个参数IE 中没有
    FF中为事件的响应顺序
    如果LZ想测试就把触发标签的TAGNAME OR ID ALERT出来看下(PS:我没测试过)
      

  4.   

    我试了一下,感觉像是FF用return false没有达到预期的效果;所以我改了一下test
    function test(){
    alert("ss");var e = window.event || arguments[0];
    if(e.preventDefault) return e.preventDefault();
    else return e.returnValue=false;
    /*return false*/
    在IE和FF中就一样了.测试用的IE6和FF3.5
      

  5.   

    function test(e){
        alert('sese');
     if (e.preventDefault )
    e.preventDefault(); 
     else 
    return false;
    }
      

  6.   

    我用firefox  测试下,就是我上面的说的效果
    版本是3.6