我已经编写了一些用于添加事件监听器的跨浏览器代码,然后chrome开始变得很时髦,有人知道为什么会这样吗?
添加事件侦听器代码:
function addEventListener(Elm,Type,Func)
{
if(Elm.attachEvent)
Elm.attachEvent((Type.substr(0,2) == 'on' ? Type : 'on'+Type),Func);
else
Elm.addEventListener(Type,Func);
}
调用方法的代码:
addEventListener(window,'load',SetSize);
addEventListener(window,'resize',SetSize);
错误:
Uncaught TypeError: Object load has no method 'addEventListener'
你可以非常清楚地看到我以正确的顺序传递了参数,但它们没有按照所述顺序进行解释..
答案 0 :(得分:6)
您已覆盖window.addEventListener
。
原生签名为:event_name, callback
但您的签名为:object, event_name, callback
。
更改函数的名称addEventListener
或命名空间,例如my_framework.addEventListener
答案 1 :(得分:3)
您已重新定义window.addEventListener
。您在全局命名空间中声明的任何内容基本上都属于window
,因此:
function addEventListener(...) {
}
与:
相同window.addEventListener = function(...) {
}
原生addEventListener
的参数签名为eventName
,listener
,但您有Elm
,Type
,Func
。
然后在您的函数正文中,您正在Elm.addEventListener
并传递'load'
和SetSize
。在该调用中,它再次调用您的函数(因为Elm
为window
),这次,它会尝试在字符串{{1}上调用addEventListener
},这将无法工作,因为字符串没有该方法。
更改函数的名称或命名空间,它应该可以正常工作。
答案 2 :(得分:2)
我想说窗口对象没有.attachEvent或.addEventListener。
这可能是因为您的函数名为addEventListener并覆盖了window.addEventListener()