7

一个非常小众的问题:

我有时(30% 的时间)在prototype.js 库的第 3877 行(来自谷歌的 1.6.0.2 版:http: //ajax.googleapis.com/ajax/libs/prototype/ 1.6.0.2/prototype.js)。

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

该问题出现在 IE7 和 FF3 中。

这是 FireBug 给出的信息:

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

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

我四处搜索,发现在同一行上还有 1 个提到该错误,但没有答案,所以我将其发布在这里,也许有一天有人会有答案:)。

4

4 回答 4

5

我刚刚发现如果您不小心在观察者调用的括号上留下了这个错误,也会发生此错误:

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

代替

Event.observe(document, 'myapp:application_ready', myapp.MyClass.initApp);
于 2008-10-06T16:41:50.177 回答
3

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

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

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

于 2008-09-04T12:38:42.280 回答
3

这可能会导致错误:

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

你应该这样做:

Event.observe(myElement, 'click', function() { myFunction(myParameters) });
于 2011-03-07T12:07:32.830 回答
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 和最新解决的问题 :)

于 2011-01-25T02:52:13.187 回答