2012-05-03 132 views
1

我是一个JavaScript的新学习者,下面的代码来自javascript权威指南。将一个事件添加到元素

function addEvent(elem, evtType, func) 
{ 
    if (elem && typeof(elem) == "object") 
    { 

     if (elem.addEventListener) 
     { 
     elem.addEventListener(evtType, func, false); 
     } 

     else 
     { 
     elem["on" + evtType] = func; 
     } 
    } 
} 

为什么它添加

if (elem.addEventListener) 
    { 
    elem.addEventListener(evtType, func, false); 
    } 

window.onload下的每个浏览器工作正常。以下是我的测试示例。

<script type="text/javascript"> 
     window.onload=myFuntion(); 
     function myFuntion(){ 
      alert("test"); 
     } 
    </script> 
</head> 

<body> 

    <h1> testtste </h1> 
</body> 

它在IE浏览器下工作正常。

+0

看看jQuery库。它使DOM操作更容易,但它也提供事件,动画,ajax等等等 – ppumkin

+0

@ppumkin至少有人试图理解事情如何工作:)。 – kapa

+0

一些Quirksmode阅读:[传统事件注册模型](http://www.quirksmode.org/js/events_tradmod.html),[高级事件注册模型](http://www.quirksmode.org/js/events_advanced。 HTML) – kapa

回答

2

直接分配不健壮。

...并且您的代码无论如何都不会在加载时运行该功能。它立即运行并将返回值(undefined)指定给onload对象。

如果我们解决这个问题,那么一个示范:

<script type="text/javascript"> 
     window.onload=myFuntion; 

     function myFuntion(){ 
      alert("test"); 
     } 
    </script> 
    <script type="text/javascript"> 
     window.onload=myOtherFunction; 

     function myOtherFunction(){ 
      alert("test2"); 
     } 
    </script> 

该事件被覆盖。只有一个功能会触发。

...虽然从权威指南的例子不是很好。它回归到直接分配(这使得它毫无意义),而不是尝试使用多个事件绑定的旧专有API(例如,用于IE 8及更低版本的attachEvent)。

相关问题