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);