来自prototype.js第3877行的“undefined handler”

时间:2008-09-04 12:09:21

标签: javascript google-maps prototypejs

一个非常小众的问题:

我有时(30%的时间)在prototype.js库的第3877行(来自google:http://ajax.googleapis.com/ajax/libs/prototype/1.6.0.2/prototype.js的版本1.6.0.2)上获得'未定义的处理程序'javascript错误。

现在,在此页面上,我有一个谷歌地图,我使用原型窗口库。

问题出现在IE7和FF3中。

这是FireBug提供的信息:

handler is undefined
? in prototype.js@3871()prototype.js (line 3877)
handler.call(element, event);

我切换到本地版本的prototypejs并在违规方法(createWraper)中添加了一些调试但是调试从未出现在错误之前......

我用Google搜索并在同一行找到另外一个错误,但没有回答,所以我在这里张贴,也许有一天会有人回答:)。

4 个答案:

答案 0 :(得分:5)

我刚刚发现,如果你不小心在观察者的电话中留下了括号,也会发生这个错误:

Event.observe(document, 'myapp:application_ready', myapp.MyClass.initApp());

而不是

Event.observe(document, 'myapp:application_ready', myapp.MyClass.initApp);

答案 1 :(得分:3)

  

我切换到本地版本的prototypejs并添加了一些调试   在违规方法(createWraper)中,但调试永远不会出现   在错误之前......

实际上,当错误发生时调用的违规函数是在“createWrapper”中创建的“包​​装器”(但不在那里调用)。基本上发生的事情是你附加了一个函数作为元素的事件处理程序,并且该函数实际上并不存在。

如果您尝试输入任何调试信息以尝试并确定哪个功能“不存在”,则在第3871和3878行之间的包装函数中添加警报消息或firebug控制台输出。

答案 2 :(得分:3)

这可能会导致错误:

Event.observe(myElement, 'click', myFunction(myParameters));

你应该这样做:

Event.observe(myElement, 'click', function() { myFunction(myParameters) });

答案 3 :(得分:2)

Prototype中来自prototype.js 错误的“未定义处理程序”的简单解决方案只是...修复原型。我在这里找到了建议:https://prototype.lighthouseapp.com/projects/8886/tickets/407-ie7-i8-report-handler-is-null-or-not-an-object它实际上正在发挥作用。

找到以下行: handler.call(element, event); 并替换为 if (handler) handler.call(element, event) 原型1.6.0.3和最新版本解决了问题:)