2012-05-03 130 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)。

相關問題