“неопределенный обработчик” из prototype.js строки 3877

StackOverflow https://stackoverflow.com/questions/43584

Вопрос

Очень узкоспециализированная проблема:

Иногда (в 30% случаев) я получаю ошибку javascript "неопределенный обработчик" в строке 3877 библиотеки prototype.js (версия 1.6.0.2 от Google: 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), но отладка никогда не появляется перед ошибкой...

Я погуглил и нашел еще 1 упоминание об ошибке в той же строке, но ответа нет, поэтому я публикую его здесь, где, возможно, когда-нибудь у кого-нибудь будет ответ :).

Это было полезно?

Решение

Я только что узнал, что эта ошибка также возникает, если вы случайно оставляете скобку при вызове observer:

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), но отладка никогда не появляется перед ошибкой...

На самом деле нарушающая функция, вызываемая при возникновении ошибки, является "оболочкой", которая создается внутри createWrapper (но не вызывается там).По сути, происходит то, что вы подключили функцию в качестве обработчика событий для элемента, а функция на самом деле не существует.

Если вы пытаетесь ввести какую-либо отладочную информацию, чтобы попытаться точно определить, какая функция "не существует", тогда добавьте свои предупреждающие сообщения или вывод консоли firebug внутри функции-оболочки между строками 3871 и 3878.

Действительно простое решение для “неопределенный обработчик” из 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