[latex]Mae govannen![/latex]
Besser ist es, den aktuellen Anzeige-Zustand zu speichern (hier z.B. als boolschen Wert, da es nur zwei Zustände gibt)
An dem ist es gerade nicht. document.getElementById('E'+str).style.display enthält entweder nichts oder einen String. Der String kann einige verschiedene Werte (none, block, inline, ....) haben- und das hat signifikante Auswirkungen Demnach ist es kein boolschen Wert, nicht mal ein "quasiboolscher" Wert:
Das ist nicht das, was ich schrieb. Es gibt in diesem Beispiel genau zwei Zustände: sichtbar und unsichtbar. und statt sich auf irgendwelche Inhalts-Vergleiche einzulassen, speichert man hat genau diesen zustand ab und ändert ihn entsprechend.
also z.B.:
var bla = document.getElementById("foo");
und dann bla.el_is_visible = true oder bla.el_is_visible = false setzen und genau _das_ in der if-Abfrage verwenden, und nicht den Inhalt des a-Elements. Statt das objekt bla zu erweitern kann man diese Werte auch wie geschrieben in einem Array oder Objekt vorhalten.
Hat man mehr als zwei Zustände, benutzt man halt nicht true/false, sondern schreibt einen entsprechenden Wert in diese Variable. Aber niemals auf den aktuellen Inhalt des Elements vergleichen.
// onload:
Wo? Ich seh' nichts davon. ... Du schreibst zwar in der Erklärung etwas dazu, aber da der Code ja angeblich selbsterklärend sein soll, muß man den Code auch ohne diese Erklärung bewerten.Was soll das? Der Code steht erkennbar unter dem HTML und wenn ich schon einen Remark "// onload" setze - der zum Code gehört(!) - dann kann ich mit allem Recht der Welt reklamieren, dass der Code selbsterklärend ist.
Genau das schrieb ich: Der code steht unter dem HTML und deshalb funktioniert es. Wenn sich jemand den Code kopiert und das Script im Head einbindet, klappt es nicht mehr. Und das erklärt sich eben keineswegs aus einem simplen Kommentar, der nur aus //onload besteht. Hier ist nicht jeder Experte und weiß um das Verhalten von JS.
Dein Gemecker (genau das ist es, was Du abgeliefert hast) stellt den darin enthaltenen Widerspruch sehr gut dar.
Wenn du meinst...
Das macht man ein Mal beim Laden der Seite und greift dann in der Funktion nur auf die schon vorhandenen Referenzen zu.
Besser nicht! Gerade weil hier jemand noch jquery empfohlen hat: Werden weitere Javascript-Bibliotheken geladen, dann können auch diese "globale" Variablen belegen oder überladen. Man kann also auf den Inhalt der Variablen bei der Behandlung eines späteren Ereignisses nicht mehr vertrauen. Deshalb ist diese Vorgehensweise nicht immer eine gute Idee. Innerhalb von Funktionen ist es ok.
Setzen/Erweitern denn die Frameworks irgendwelche globale Variablen? Ich war der Meinung, daß gerade dort alles gekapselt sei. Aber davon abgesehen: Man verwendet man bei vernünftiger Programmierung ohnehin bevorzugt möglichst keine/wenige globalen Variablen, sondern kapselt den Code, dann passiert sowas nicht.
Cü,
Kai
Dank Hixies Idiotenbande geschieht grade eben wieder ein Umdenken in Richtung "Mess up the Web". (suit)
Foren-Stylesheet Site Selfzeug JS-Lookup
SelfCode: sh:( fo:| ch:? rl:( br:< n4:( ie:{ mo:| va:) js:| de:> zu:) fl:( ss:| ls:?