• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Was gibt es Schöneres als den Mai draußen in der Natur mit allen Sinnen zu genießen? Lasst uns teilhaben an Euren Erlebnissen und macht mit beim Thema des Monats Da blüht uns was! ---> Klick

[Javascript] JS-Funktion funktioniert nur einmal

lowflyer7

Cripps Pink
Registriert
29.01.08
Beiträge
154
Hallo zusammen,

zugegeben ... meine letzte JS-Programmierung liegt etwas zurück und ich stehe gerade auf dem Schlauch. Ich habe eine Funktion geschrieben, die einen DIV-Container je nach Zustand sichtbar oder unsichtbar schalten soll. Leider funktioniert sie nur einmal, bei einem zweiten Klick auf den Link läuft sie nicht mehr. Hier der Code:

Code:
//CSS-Code

<style type="text/css">
	.hinweise { width:150px; height:150px; position:absolute; top:50px; left:50px; background-color: red; visibility: hidden; }
</style>

...

//JS-Code

<script language="JavaScript" type="text/javascript">
<!--

function ChangeVis() {

if(document.getElementById("hinweise").style.visibility = "hidden")
	{
	document.getElementById("hinweise").style.visibility = "visible";
	}
else if(document.getElementById("hinweise").style.visibility = "visible")
	{
	document.getElementById("hinweise").style.visibility = "hidden";
	}
return;
}

//-->
</script>

...

//Funktionsaufruf

F&uuml;r wichtige Hinweise bitte <a href="javascript:ChangeVis()">hier</a> klicken!

...

//DIV-Container

<div class="hinweise" name="hinweise" id="hinweise">Test</div>

Hat jemand eine Idee, woran es liegen könnte?

Danke

Andy
 

fraggle

Boskoop
Registriert
11.01.05
Beiträge
39
Code:
<script type="text/javascript">
<!--
function ChangeVis() {
	if (document.getElementById("hinweise").style.visibility == "hidden") {
		document.getElementById("hinweise").style.visibility = "visible";
	} else {
		document.getElementById("hinweise").style.visibility = "hidden";
	}
}
//-->
</script>
 

lowflyer7

Cripps Pink
Registriert
29.01.08
Beiträge
154
Jetzt verstehe ich die Welt nicht mehr. Ich dachte, das hätte ich schon probiert ... :oops:

Na egal, jetzt funktioniert es auf jeden Fall. Vielen Dank!
 

gKar

Maunzenapfel
Registriert
25.06.08
Beiträge
5.362
@lowflyer7: Du hast "=" statt "==" geschrieben, also immer gleich den Wert hidden zugewiesen und sofort wieder den Wert visible hinterher. Eine Fallunterscheidung findet so nicht statt.

Der Rest, den fraggle geändert hat, macht's nur eleganter/kürzer (z.B. überflüssiges Return weg und unnütze zweite Fallunterscheidung weg, deren Ergebnis ohnehin schon feststeht).
 

lowflyer7

Cripps Pink
Registriert
29.01.08
Beiträge
154
@lowflyer7: Du hast "=" statt "==" geschrieben, also immer gleich den Wert hidden zugewiesen und sofort wieder den Wert visible hinterher.

Mir war gar nicht bewusst, dass dies innerhalb einer if-Abfrage funktioniert. Danke!
 

gKar

Maunzenapfel
Registriert
25.06.08
Beiträge
5.362
Ja, das sind die Tücken von JavaScript ;)
In der If-Bedingung darf ein beliebiger Ausdruck stehen. Wie in C oder Java ist eine Zuweisung auch ein Ausdruck, sie wird zum zugewiesenen Wert ausgewertet. D.h. In "if (….visibility = hidden)" weist Du der Variable visibility erst den Wert hidden zu, danach wird die ganze „Bedingung“ zu hidden ausgewertet. If prüft dann, ob der Wert <> 0 ist (oder <> null oder <>false, was in dieser typlosen Sprache praktisch auf dasselbe hinausläuft), und das ist der Fall. Also wird anschließend immer der Then-Zweig ausgeführt.

Ich muss zugeben: Hätte fraggle nicht die richtige Lösung aufgeschrieben, wäre mir das auch nicht gleich aufgefallen. (Dass ich auch Sprachen wie Pascal/Delphi oder SQL verwende, wo "=" ein Vergleichsoperator ist, macht das Erkennen solcher Fehler nicht einfacher ;) )