<script>
    window.onload = function() {
var a = document.getElementById("test"); a.onclick = function(e) {
alert("跳不了"); stopDefault(e);
}
    }    function stopDefault( e ) { 
if ( e && e.preventDefault ) 
e.preventDefault(); 
else {
window.event.returnValue = false; 
}
    
return false;
    }
    </script><a href="www.baidu.com" id="test">点我</a><script>
    function stopDefault( e ) { 
if ( e && e.preventDefault ) 
e.preventDefault(); 
else {
window.event.returnValue = false; 
}
    
return false;
}    function test(e) {
alert("跳不了"); stopDefault(e);
    }
</script>
<a href="www.baidu.com" id="test" onclick="test(e)">点我</a>
第一段代码可以成功阻止a标签的默认事件,但第二段代码就报undefined e的错误,为什么啊?

解决方案 »

  1.   

    本帖最后由 net_lover 于 2012-02-22 19:17:40 编辑
      

  2.   

    你的test这样定义function test(){
        alert(arguments.callee.caller);
    }然后你在各个浏览器下看看输出,应该明白为啥必须要传event了,chrome和opera下也支持直接获取window.event了哦。
      

  3.   

    装个firebug就什么都看得出来了,e只是一个常用的表示事件的形参,就像循环里面喜欢用i
      

  4.   

    嗯出来了~但不知道为什么这么用~
    不好意思我是新手,弹出的信息没看懂我这有firebug,要怎么看呢?
    我知道e是一个参数,但为什么第一段代码中可以用e当形参,第二段不行呢?
      

  5.   

    <a href="www.baidu.com" id="test" onclick="test(e)">点我</a> 
    在标准的事件模型中,argument[0]即你用的这个"e"会被当作事件数据载体,会没有问题,但IE的实现很特殊,传入"e"与传入"event"是有很大区别的,"e"未在其他位置声明过便等于传入一个undefined,传"event"等于引用window.event对象,于是IE下就不会实现。