Chrome无法正确识别函数参数

时间:2013-08-05 15:30:22

标签: javascript events

我已经编写了一些用于添加事件监听器的跨浏览器代码,然后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' 

你可以非常清楚地看到我以正确的顺序传递了参数,但它们没有按照所述顺序进行解释..

3 个答案:

答案 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的参数签名为eventNamelistener,但您有ElmTypeFunc

然后在您的函数正文中,您正在Elm.addEventListener并传递'load'SetSize。在该调用中,它再次调用您的函数(因为Elmwindow),这次,它会尝试在字符串{{1}上调用addEventListener },这将无法工作,因为字符串没有该方法。

更改函数的名称或命名空间,它应该可以正常工作。

答案 2 :(得分:2)

我想说窗口对象没有.attachEvent或.addEventListener。

这可能是因为您的函数名为addEventListener并覆盖了window.addEventListener()