Onclick wird erst nach 2* klicken ausgeführt

Hallo.

Folgender Javascript-Code wird erst nach 2 mal klicken beim onclick event ausgeführt:

[code] function showHide(layer,layertext)
{
if (document.getElementById(layer).style.display == “none”)
{
document.getElementById(layer).style.display = “block”;
document.getElementById(layertext).style.display = “block”;

      } 
     else 
      { 
        document.getElementById(layer).style.display = "none";
        document.getElementById(layertext).style.display = "none";
      } 
} [/code]

Kann mir einer erklären warum? Und hat einer vllt. ne Lösung?

lg Lukas

Bitte setze eine Kontrollausgabe per alert direkt an den Anfang deiner Funktion, damit diese dich von deinem Irrglauben heilen möge.

ups. sry falsch beschreiben.

Der Wert display wird erst beim 2ten mal geändert. :wink:

Woran liegt das denn?

[quote=“lu-fun”]Der Wert display wird erst beim 2ten mal geändert. :wink:

Woran liegt das denn?[/quote]
Daran, dass die Bedingung beim ersten Mal nicht wahr ist.

doch. eig. schon. Hab ja in der CSS Datei die Elemente als display: none; gemacht. :smiley:

Sieht wohl nicht so aus :wink:. Ein alert(document.getElementById(layer).style.display); vor der Abfrage könnte dir vielleicht weiterhelfen?!

Gewöhne dir doch jetzt bitte endlich ab, davon auszugehen, dass Scripte so ablaufen, wie du es dir vorstellst - und überprüfe es stattdessen durch Kontrollausgaben o.ä. …!

Und das führt eben in diesem Fall nicht dazu, dass document.getElementById(layer).style.display den Wert “none” liefert.

Okay.

Und wie könnte ich es machen das document… none ist?

Die Werte von CSS-Eigenschaften sind über das style-Objekt nur abfragbar, wenn sie zuvor bereits über dieses gesetzt wurden, oder per style-Attribut direkt am Element notiert wurden.

Wenn das Element per Default immer erst mal versteckt ist, dann kann man natürlich auch einfach die Abfragereihenfolge umdrehen.
(Per Default versteckt werden sollte es aber natürlich nur, wenn JS verfügbar ist.)