一个非常小众的问题:

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

现在,在此页面上我有一个 Google 地图,并且使用 Prototype Window 库。

该问题出现在IE7和FF3中。

这是 FireBug 提供的信息:

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

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

我用谷歌搜索了一下,发现同一行上还有另外一个提到该错误的地方,但没有答案,所以我将其发布在这里,也许有一天有人会得到答案:)。

有帮助吗?

解决方案

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

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

代替

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

其他提示

这可能会导致错误:

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

你应该这样做:

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

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

实际上,发生错误时调用的有问题的函数是“wrapper”,它是在 createWrapper 内部创建的(但没有在那里调用)。基本上发生的情况是,您附加了一个函数作为元素的事件处理程序,但该函数实际上并不存在。

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

非常简单的解决方案 来自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 和最新版解决:)

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top