2012-08-07 23 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