2012-08-07 12 views
1

此代碼似乎並不正確運行:意外的 「其他」 和功能不運行

var addEventListener = (function() { 
    "use strict"; 
    if (document.addEventListener) { 
     return function (element, event, handler) { 
      element.addEventListener(event, handler, false); 
     }; 
    } else { 
     return function (element, event, handler) { 
      element.attachEvent('on' + event, handler); 
     }; 
    } 
})(); 

addEventListener(window, 'onload', calcFailback); 

鉻返回:

Uncaught TypeError: Object onload has no method 'addEventListener'

JSLint的返回:

Unexpected else.

任何想法?

+0

請不要與破壞問題的原始上下文編輯改寫你的問題。 – Alnitak 2012-08-07 12:30:17

回答

2

您正在創建一個全局變量addEventListener,它將作爲window的屬性添加。所以window.addEventListenerelement === window,與此調用)實際上是指您的自定義功能,而不是本機。使用不同的名稱:

var myAddEventListener = (function() { 
    "use strict"; 
    if (document.addEventListener) { 
     return function(element, event, handler) { 
      element.addEventListener(event, handler, false); 
     }; 
    } else { 
     return function(element, event, handler) { 
      element.attachEvent('on' + event, handler); 
     }; 
    } 
})(); //<-- invoke it 

還可以使用"load"

myAddEventListener(window, "load", function(){}) 
+0

謝謝,補充說,但我得到另一個錯誤:未捕獲TypeError:對象onload沒有方法'addEventListener' – cmplieger 2012-08-07 12:27:27

+0

它現在部分工作。它運行但由於某種原因不能被調用兩次。我仍然收到JSlint錯誤:'返回'後意外'其他'。任何想法爲什麼? – cmplieger 2012-08-07 12:42:18

+0

@SnippetSpace不能將同一個函數作爲事件監聽器兩次添加到具有相同'useCapture'的相同元素。根據crockford的說法,我不在乎JSLint,所以我不知道爲什麼'else'不會成爲「最佳實踐」。 – Esailija 2012-08-07 12:43:26