Pregunta

Un problema muy específico:

A veces (el 30% del tiempo) aparece un error de JavaScript de 'controlador indefinido' en la línea 3877 de la biblioteca prototipo.js (versión 1.6.0.2 de Google: http://ajax.googleapis.com/ajax/libs/prototype/1.6.0.2/prototype.js).

Ahora en esta página tengo un mapa de Google y uso la biblioteca Prototype Window.

El problema ocurre en IE7 y FF3.

Esta es la información que proporciona FireBug:

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

Cambié a una versión local de prototipojs y agregué algo de depuración en el método ofensivo (createWraper) pero la depuración nunca aparece antes del error...

Busqué en Google y encontré otra mención del error en la misma línea, pero no hubo respuesta, así que la publicaré aquí donde tal vez algún día alguien tenga una respuesta :).

¿Fue útil?

Solución

Acabo de descubrir que este error también ocurre si accidentalmente dejas el paréntesis en tu llamada de observador:

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

en lugar de

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

Otros consejos

Probablemente esto provocará un error:

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

Deberías hacerlo así:

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

Cambié a una versión local de PrototypeJS y agregué algo de depuración en el método ofensivo (createWraper), pero la depuración nunca aparece antes del error ...

En realidad, la función ofensiva que se llama cuando ocurre el error es "wrapper" que se crea dentro de createWrapper (pero no se llama allí).Básicamente, lo que sucede es que ha adjuntado una función como controlador de eventos para un elemento y la función en realidad no existe.

Si está intentando ingresar información de depuración para intentar identificar qué función "no existe", agregue sus mensajes de alerta o la salida de la consola Firebug dentro de la función contenedora entre las líneas 3871 y 3878.

Solución realmente sencilla para “controlador indefinido” de prototipo.js El error en Prototype es simplemente...Arreglar el prototipo.Encontré consejos aquí: https://prototype.lighthouseapp.com/projects/8886/tickets/407-ie7-i8-report-handler-is-null-or-not-an-object y realmente está funcionando.

Simplemente busque la línea con:handler.call(element, event); y reemplazar conif (handler) handler.call(element, event)problema resuelto con el prototipo 1.6.0.3 y más reciente :)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top