Domanda

Un problema molto di nicchia:

A volte (il 30% delle volte) ricevo un errore javascript "gestore non definito" sulla riga 3877 della libreria prototipo.js (versione 1.6.0.2 da google: http://ajax.googleapis.com/ajax/libs/prototype/1.6.0.2/prototype.js).

Ora in questa pagina ho una mappa di Google e utilizzo la libreria Prototype Window.

Il problema si verifica in IE7 e FF3.

Queste sono le informazioni fornite da FireBug:

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

Sono passato a una versione locale di prototipojs e ho aggiunto del debug nel metodo incriminato (createWraper) ma il debug non appare mai prima dell'errore...

Ho cercato su Google e ho trovato un'altra menzione dell'errore sulla stessa riga, ma nessuna risposta, quindi la pubblico qui dove forse un giorno qualcuno avrà una risposta :).

È stato utile?

Soluzione

Ho appena scoperto che questo errore si verifica anche se lasci accidentalmente la parentesi nella chiamata dell'osservatore:

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

invece di

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

Altri suggerimenti

Ciò probabilmente causerà un errore:

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

Dovresti invece farlo in questo modo:

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

Sono passato a una versione locale di ProtoTypeJS e ho aggiunto un po 'di debug nel metodo offensivo (CreateWraper) ma il debug non appare mai prima dell'errore ...

In realtà la funzione offensiva chiamata quando si verifica l'errore è "wrapper" che viene creata all'interno di createWrapper (ma non chiamata lì).Fondamentalmente ciò che sta accadendo è che hai collegato una funzione come gestore di eventi per un elemento e la funzione in realtà non esiste.

Se stai cercando di inserire informazioni di debug per provare a individuare quale funzione "non esiste", aggiungi i messaggi di avviso o l'output della console Firebug all'interno della funzione wrapper tra le righe 3871 e 3878.

Soluzione davvero semplice per "gestore non definito" da prototipo.js l'errore in Prototype è semplicemente...fissare il prototipo.Ho trovato consigli qui: https://prototype.lighthouseapp.com/projects/8886/tickets/407-ie7-i8-report-handler-is-null-or-not-an-object e funziona davvero.

Basta trovare la riga con:handler.call(element, event); e sostituire conif (handler) handler.call(element, event)problema risolto con il prototipo 1.6.0.3 e le ultime :)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top