Ergebnis 1 bis 7 von 7
  1. #1
    Roter Delicious
    Themenstarter

    Registriert
    01.2008
    Beiträge
    91

    JS-Funktion funktioniert nur einmal

    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

  2. #2
    Boskoop Avatar von fraggle
    Registriert
    01.2005
    Ort
    Braunschweig
    Alter
    31
    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>

  3. #3
    Roter Delicious
    Themenstarter

    Registriert
    01.2008
    Beiträge
    91

    positiv

    Jetzt verstehe ich die Welt nicht mehr. Ich dachte, das hätte ich schon probiert ...

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

  4. #4
    Altländer Pfannkuchenapfel Avatar von gKar
    Registriert
    06.2008
    Ort
    Wetter (Ruhr)
    Beiträge
    4.456
    @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).
    * Wer nichts weiß, muss alles glauben.
    * Geduld mit der Streitsucht der Einfältigen! Es ist nicht leicht zu begreifen, dass man nicht begreift.
    Marie von Ebner-Eschenbach

    Mac-Tastaturlayout für Windows (z.B. in Bootcamp oder VM)

  5. #5
    Roter Delicious
    Themenstarter

    Registriert
    01.2008
    Beiträge
    91
    Zitat Zitat von gKar Beitrag anzeigen
    @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!

  6. #6
    Altländer Pfannkuchenapfel Avatar von gKar
    Registriert
    06.2008
    Ort
    Wetter (Ruhr)
    Beiträge
    4.456
    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 )
    * Wer nichts weiß, muss alles glauben.
    * Geduld mit der Streitsucht der Einfältigen! Es ist nicht leicht zu begreifen, dass man nicht begreift.
    Marie von Ebner-Eschenbach

    Mac-Tastaturlayout für Windows (z.B. in Bootcamp oder VM)

  7. #7
    Cripps Pink
    Registriert
    01.2010
    Beiträge
    153
    Tooltipp: Mit http://jslint.com würde man so einen Fehler finden.

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •