• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Seit Gutenbergs Zeiten haben sich nicht nur Bücher über die ganze Welt verbreitet, sondern Buchstaben und Wörter begleiten uns allumfassend. Selbst moderne Devices mit Sprachsteuerung und Super-KI kommen nicht ohne Buchstaben, Wörter oder Symbole aus. Nicht zuletzt darum ist das Thema das Monats Am Anfang war das Wort ---> 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 ;) )