FB18 - Das Forum für Informatik

fb18.de / Off-Topic / Hard- und Softwarefragen

javascript - objekt nach link-klick nicht mehr definiert

javascript - objekt nach link-klick nicht mehr definiert 2007-06-21 02:10
Anonymer User
Hi,
ich kapsel alle Javascript-Funktionen die meine Navigation betreffen in einem Javascript-Objekt namens 'Nav'.
Dieses Objekt/die "Klasse" befindet sich in einer externen .js-Datei.

D.h. ich löse per onmouseover="Nav.over()" und onmouseout="Nav.out()" jeweils Effekte aus.
Wenn ich jetzt über so einem Button bin und den Link klicke und kurz darauf das onmouseout-event auslöse, meldet Javascript das "Nav" nicht definiert sei.

Wo liegt das Problem? Und vor allem: wie löse ich es?

Vielen Dank im voraus!

RE: javascript - objekt nach link-klick nicht mehr definiert 2007-06-21 09:18
Hannes
ist es denn vor dem klick definiert? scheint mir eher so, als wäre die datei nicht richtig eingebunden o.ä.

RE: javascript - objekt nach link-klick nicht mehr definiert 2007-06-21 10:49
Wolf
Hast Du das hier auch nicht vergessen?
<script type="text/javascript" src="DEINE_JS_DATEI.js"> </script>
Poste doch mal den Code, in dem Du das Objekt deklarierst, initialisierst und benutzt. Sonst ist das Ganze ein Ratespiel ;)

Hilft: http://de.selfhtml.org/javascript/index.htm

Hier mal ein Beispiel, das funktioniert:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <meta http-equiv="content-type" content="text/html; charset=ISO-8859-1"> <title>JS-Objekt-Beispiel</title> <script type="text/javascript"> function myObject (ausgabe) { this.ausgabe = ausgabe; } function talk (who) { return who.ausgabe; } function getIn (who) { var mine = new myObject("in"); return talk(mine); } function getOut (who) { var mine = new myObject("out"); return talk(mine); } </script> </head> <body> <img src="http://de.selfhtml.org/src/ffox1.gif" onmouseover="window.status = getIn(this)" onmouseout="window.status = getOut(this)" /> </body> </html>Dass der JS-Code dabei nicht in einer anderen Datei steht, ist unwesentlich.
Damit Du den Source testen kannst, musst Du JS erlauben, den Statuszeilentext Deines Browsers zu ändern.

Edit: Ich glaub, Nav ist einfach nicht initialisiert worden. Du musst eine (globale) Funktion aufrufen, die Dein Objekt erstellt, bevor Du es benutzen kannst. Statische Objekte gibt es glaub ich gar nicht in JS, ganz im Gegensatz zu seitenglobalen Funktionen.
Das heisst für Dich, dass Du eine Funktion "over" und eine Funktion "out" ausserhalb von Nav schreibst, die Nav implizit erstellen und dann benutzen. Das Erstellen würde ich an Deiner Stelle auslagern, wenn es komplizierter ist. Dann benutzt Du "over" und "out".
Oder Du faktorisierst die Funktionen, die Du brauchst, aus dem Objekt raus und rufst sie dann direkt auf. Eine der beiden Methoden ist bequemer bei Dir… Musst Du halt schauen.

Kannst Dir ja auch mal anschauen, wie andere das so machen. JS ist einigermassen unintuitiv, wenn Du mich fragst. Da lohnt es sich, Beispiele zu studieren.

RE: javascript - objekt nach link-klick nicht mehr definiert 2007-06-22 00:54
Anonymer User
Danke erstmal für die Antworten! [14]

Natürlich funktionieren die Effekte ansonsten. D.h. Nav wird richtig intialisiert (onload) und ist dann auch funktional. Halt nur nicht nach dem Klick.

Tatsächlich ist es wohl noch etwas komplizierter :)

Ich benutze das prototype-Framework (prototypejs.org). Dort hatte ich einige Fehlermeldungen die von der prototype.js geschmissen wurden, als ich in meiner Navigation geklickt und mich dann etwas bewegt hatte (also onmouseover ausgelöst hatte).
Als Abhilfe dafür habe ich gelesen das man mit folgendem:
Event.observe(window, 'unload', Event.unloadCache, false);onunload alle eventhandler deregistrieren soll und das hat auch funktioniert.

Evtl. kommen daher meine Probleme irgendwie. Ein herausnehmen des Aufrufs bringt allerdings auch keine Heilung.

Ein simples
if(Nav){ Nav.out() } bringt auch die Fehlermeldung 'Nav is not defined'. Was mich allerdings echt zur Verzweiflung bringt, da das so nicht sein dürfte…

Naja, vllt. habt ihr ja noch nen Tip.

Danke!

RE: javascript - objekt nach link-klick nicht mehr definiert 2007-06-22 01:02
Wolf
Toll, Du benutzt ein fancy buggy Framework und sagst keinen Ton.. Kann doch keiner ahnen, dass Du ein fortgeschrittenes Problem hast. Bitte sei nächstes Mal ausführlicher.

Hol Dir Support bei der Seite, wo Du das herhast, würd ich mal sagen.
http://groups.google.com/group/rubyonrails-spinoffs <~ Deine Support-Seite

RE: javascript - objekt nach link-klick nicht mehr definiert 2007-06-22 09:31
DeGT
Ein simples
if(Nav){ Nav.out() } bringt auch die Fehlermeldung 'Nav is not defined'. Was mich allerdings echt zur Verzweiflung bringt, da das so nicht sein dürfte…
Doch, das darf so sein - du musst
if typeof(Nav)=='undefined' nehmen.

RE: javascript - objekt nach link-klick nicht mehr definiert 2007-06-22 10:43
Anonymer User
if typeof(Nav)=='undefined'

Genau das war das Problem [15].
Hab allerdings mal gelesen das bei Javascript 'null' und 'undefined' zu false ausgewertet werden und alles andere zu true, aber egal, das war die Lösung.

Vielen Dank!! Auch an Wolf für die Mühe!