2008-09-04 4 views
7

Ein sehr Nische Problem:"undefined Handler" von prototype.js Linie 3877

ich manchmal (30% der Zeit) einen 'undefinierten Handler' erhalte Javascript-Fehler in Zeile 3877 der prototype.js Bibliothek (Version 1.6.0.2 von Google: http://ajax.googleapis.com/ajax/libs/prototype/1.6.0.2/prototype.js).

Jetzt auf dieser Seite habe ich eine Google Map und ich benutze die Prototypfenster-Bibliothek.

Das Problem tritt in IE7 und FF3 auf.

Dies ist die Info Firebug gibt:

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

ich auf eine lokale Version von PrototypeJS geschaltet und hinzugefügt einige Debug im betreffenden Verfahren (createWraper), aber das Debuggen nie vor dem Fehler erscheint ...

Ich googelte herum und fand eine andere Erwähnung des Fehlers in der gleichen Zeile, aber keine Antwort, also poste ich es hier, wo vielleicht jemand eines Tages eine Antwort haben wird :).

Antwort

5

ich habe gerade herausgefunden dieser Fehler tritt auch auf, wenn Sie versehentlich auf die Klammer auf Ihrem Beobachter Anruf verlassen:

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

statt

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...

tatsächlich aufgerufen die fehlerhafte Funktion wird, wenn der Fehler „Wrapper“ auftritt, die im Inneren createWrapper erstellt wird (aber dort nicht genannt). Grundsätzlich passiert, dass Sie eine Funktion als Ereignisbehandlungsroutine für ein Element angehängt haben und die Funktion nicht existiert.

Wenn Sie versuchen, in all Debug-Informationen zu setzen, um zu versuchen und zu lokalisieren, welche Funktion „existiert nicht“, dann fügen Sie Ihre Alarmmeldungen oder Firebug Konsole Ausgabe in der Wrapper-Funktion zwischen den Linien 3871 und 3878.

2

Wirklich einfache Lösung für "undefined Handler" von prototype.js Fehler in Prototyp ist nur ... reparieren Prototyp. Ich habe hier einen Rat gefunden: https://prototype.lighthouseapp.com/projects/8886/tickets/407-ie7-i8-report-handler-is-null-or-not-an-object und es funktioniert tatsächlich.

einfach finden Linie mit: handler.call(element, event); und ersetzen mit if (handler) handler.call(element, event) Problem mit Prototyp gelöst 1.6.0.3 und aktuelle :)

+0

Hinzufügen der Zeile von Code, den Sie getan haben, wird verhindern, dass der Fehler passiert, aber was auch immer auslösend ist, versucht, dies für ein Element zu tun, das nicht existiert, also wäre sowieso nichts passiert. Das ist keine Lösung –

3

Dies wird wahrscheinlich einen Fehler verursachen:

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

Sie tun sollten es gefällt mir stattdessen:

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

Wenn Sie ein Element mit einem Click-Event-Handler in Canvas mit kineticjs hinzufügen, wird das Click-Ereignis ausgelöst, ohne dass ein Klick ausgelöst wurde. Vielen Dank. – Bernd

Verwandte Themen