一个非常小众的问题:
我有时(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搜索并在同一行找到另外一个错误,但没有回答,所以我在这里张贴,也许有一天会有人回答:)。
答案 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和最新版本解决了问题:)