prototype.js第3877行中的"未定义处理程序"

时间:2020-03-05 18:47:33  来源:igfitidea点击:

一个非常利基的问题:

有时(30%的时间)在prototype.js库的3877行(来自Google的1.6.0.2版:http://ajax.googleapis.com/ajax/libs/prototype/)上出现"未定义的处理程序" javascript错误。 1.6.0.2/prototype.js)。

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

该问题出现在IE7和FF3中。

这是FireBug提供的信息:

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

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

我四处搜寻,并在同一行上发现了另外1条提及该错误的信息,但没有答案,因此我将其张贴在某处,也许某天某人会给出答案:)。

解决方案

回答

I switched to a local version of prototypejs and added some debugging
  in the offending method (createWraper) but the debugging never appears
  before the error...

实际上,发生错误时要调用的有问题的函数是在createWrapper内部创建的"包​​装器"(但在那里未调用)。基本上发生的事情是,我们已将函数添加为元素的事件处理程序,而该函数实际上并不存在。

如果我们要尝试放入任何调试信息来确定"不存在"的功能,请在第3871行和第3878行之间的包装函数内添加警报消息或者firebug控制台输出。

回答

我只是发现,如果我们在观察员调用中不小心留在括号上,也会发生此错误:

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

代替

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