Frank: Abfrage einer Eigenschaft

Hallo, ich brauche da leider etwas Nachhilfe in den "basics" :-/

ich möchte gerne einem Textfeld per Javascript-Funktion wechselweise die Eigenschaft display = "none" oder display = "block" zuweisen.

Das Textfeld ist per <style>input{display:block;}</style> vor-formatiert.

Die Funktion müsste im Prinzip wie folgt aufgebaut sein:

if (document.formular.textfeld.style.display == "block")
document.formular.textfeld.style.display = "none";
else
document.formular.textfeld.style.display = "block";

Leider klappt (bei mir) die if-Abfrage nicht.

Wie kann ich den aktuellen Status Quo der Anzeige ermitteln, und warum klappt es nicht in der oben aufgeführten Form ?

Mfg Frank

  1. Hi

    Leider klappt (bei mir) die if-Abfrage nicht.

    Klappt nicht, gibts nicht. Fehlermeldung? Was passiert?

    [...] warum klappt es nicht in der oben aufgeführten Form ?

    s.o.

    mfg
    Genie

    1. Keine Fehlermeldung, nichts passiert. Nicht mal die Javascript-Konsole sagt was ...

      1. Hi

        Rück mal Quellcode raus

          
        <html>  
        <head>  
        <style type="text/css">  
        [code lang=css]input{display:block;}
        

        </style>
        <script type="text/javascript">

        function test()  
        {if (document.formular.textfeld.style.display == "block")  
        document.formular.textfeld.style.display = "none";  
        else  
        document.formular.textfeld.style.display = "block";}
        

        </script>
        </head>
        <body>
        <form name="formular">
        <input type="button" onclick="test()" value="test">
        <input name="textfeld" value="test">
        </form>
        </body>
        </html>
        [/code]
        funzt bei mir. (Ich weiß, dass da ein paar Fehler sind, doctype, <title> etc.)

        mfg
        Genie

        1. funzt bei mir.

          Das ist auch richtig - aber erst nach zweimaligem Klick auf den Button (beim ersten Ausführen des Scriptes, also nach dem Laden/Refresh der Seite ...

          da ist also doch ein "Wurm" im Konzept ...

  2. Hello out there!

    Das Textfeld ist per <style>input{display:block;}</style> vor-formatiert.

    Nein, nicht _das_, sondern alle ...

    if (document.formular.textfeld.style.display == "block")

    ... dem wärest du auf die Schliche gekommen, hättest du dir mal 'document.formular.textfeld.style.display' anzeigen lassen.

    Du setzt anfangs ein Flag (natürlich außerhalb der Funktion):
    textfeldSichtbar = true;

    Außerdem speicherst du besser 'document.formular.textfeld' in einer Variablen, damit nicht bei jedem Funktionsaufruf das Element im Baum gesucht werden muss:
    meinTextfeld = document.formular.textfeld;

    In der Funktion dann:

    if (textfeldSichtbar)  
      meinTextfeld.style.display = "none";  
    else  
      meinTextfeld.style.display = "block";  
    textfeldSichtbar = !textfeldSichtbar;
    

    See ya up the road,
    Gunnar

    --
    “Remember, in the end, nobody wins unless everybody wins.” (Bruce Springsteen)
    1. Hello out there!

      Hy You!

      Das Textfeld ist per <style>input{display:block;}</style> vor-formatiert.

      Nein, nicht _das_, sondern alle ...

      Ja - doch -

      ... dem wärest du auf die Schliche gekommen, hättest du dir mal 'document.formular.textfeld.style.display' anzeigen lassen.

      Überschätz' mich nicht ... :-)

      Nichts wird angezeigt.

      Was ich rausgekriegt hab' ist, das folgendes wunschgemäß funktioniert:

      if (document.formular.textfeld.style.display == "")
      document.formular.textfeld.style.display = "none";
      else
      document.formular.textfeld.style.display = "";

      Allerdings bin ich mir nicht sicher, welchen Status dem Textfeld
      nach document.formular.textfeld.style.display = "" zugewiesen ist:
      wieder block ??

      Deinen Lösungsansatz werde ich entsprechend umsetzen. Herzlichen Dank

      Mfg Frank

  3. Hallo Frank.

    if (document.formular.textfeld.style.display == "block")
    document.formular.textfeld.style.display = "none";
    else
    document.formular.textfeld.style.display = "block";

    Leider klappt (bei mir) die if-Abfrage nicht.

    Ja, den Status der derzeitig generierten Regeln im Stylesheet bekommst du so nicht. Aber es gibt Mittel und Wege, um dies zu bewerkstelligen.

    Einen schönen Samstag noch.

    Gruß, Mathias

    --
    sh:( fo:} ch:? rl:( br: n4:~ ie:{ mo:| va:) de:> zu:} fl:( ss:) ls:[ js:|
    „It is required that HTML be a common language between all platforms. This implies no device-specific markup, or anything which requires control over fonts or colors, for example. This is in keeping with the SGML ideal.“
    [HTML Design Constraints: Logical Markup]
    1. Ja, den Status der derzeitig generierten Regeln im Stylesheet bekommst du so nicht. Aber es gibt Mittel und Wege, um dies zu bewerkstelligen.

      Das ist ja eine aufregende Sache ... !

      Einen schönen Samstag noch.

      Ebenso - und Danke! Grüße Frank