2008-09-04 5 views
7

Очень проблема ниши:«неопределенный обработчик» от Prototype.js линии 3877

Я иногда (30% времени) получить «неопределенный обработчик» JavaScript ошибки в строке 3877 из Prototype.js библиотеки (версия 1.6.0.2 из google: http://ajax.googleapis.com/ajax/libs/prototype/1.6.0.2/prototype.js).

Теперь на этой странице у меня есть карта Google, и я использую библиотеку Window Prototype.

Проблема возникает в IE7 и FF3.

Это информация FireBug дает:

handler is undefined 
? in [email protected]()prototype.js (line 3877) 
handler.call(element, event); 

я перешел на локальную версию prototypejs и добавлены некоторые отладки в методе нарушившей (createWraper), но отладка никогда не появляется перед ошибкой ...

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

ответ

5

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

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

вместо

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

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 (но не называют). В основном происходит то, что вы привязали функцию как обработчик события для элемента, и функция фактически не существует.

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

2

Действительно простое решение для «undefined handler» from 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 и последней :)

+0

Добавление строки кода, который вы сделали, предотвратит возникновение ошибки, но все, что запускается, пытается сделать это на элементе, который не существует, так что ничего не произошло бы. это не исправление. – 2015-09-05 18:03:34

3

Это, вероятно, вызовет ошибку:

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

Вы должны сделать это выглядит следующим образом:

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

При добавлении элемента с обработчиком события click to canvas с кинетическим событием клика событие получило огонь без какого-либо нажатия, обертывание моей функции внутри анонимной функции исправило это для меня. Благодарю. – Bernd 2015-05-27 22:21:55

Смежные вопросы