nobbi: abfrage checkbox

Hallo,

eine checkbox ist wie folgt definiert:

<input type="checkbox" name="box1"> Box1

Die Abfrage im Script Teil sieht so aus:

if(document.forms['meineForm'].box1.checked = "true"){
alert("ja");
} else {
alert("nein");
}

Setz ich jetzt den Haken und rufe den Programmteil auf,
kommt die Alertbox "ja".
Setz ich den Haken nicht wird der Haken automatisch gesetzt
und wieder kommt die Box "ja".

Wo mach ich was falsch?

Danke schon mal.

  1. if(document.forms['meineForm'].box1.checked = "true")

      
    if(document.froms['meineFrom'].box1.checked === true)  
    
    
    1. Hallo,

      if(document.forms['meineForm'].box1.checked = "true")

      das ist doppelt falsch, und doppelt falsch ergibt nicht automatisch richtig:
      a) Man möchte nicht den String "true", sondern die boolsche Konstante true verwenden.
      b) Was da in der if-Anweisung steht, ist eine Zuweisung, kein Vergleich

      if(document.froms['meineFrom'].box1.checked === true)

      Das ist zwar nicht mehr falsch (vom doppelten Tippfelher[tm] abgesehen), aber unnötig umständlich: "Wenn es wahr ist, das ...checked exakt wahr ist ..."
      Einen boolschen Wert noch explizit auf true zu vergleichen, ist selten sinnvoll; eigentlich nur dann, wenn nicht sicher ist, dass man einen boolschen Wert in der Hand hat. In diesem Fall *ist* das aber sicher. Also:

      if (document.forms['meineForm'].box1.checked)

      Sieht doch gleich viel lesbarer aus.

      Ciao,
       Martin

      --
      Okay, Alkohol ist keine Antwort.
      Aber manchmal vergisst man beim Trinken wenigstens die Frage.
      Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
    2. if(document.forms['meineForm'].box1.checked = "true")

      if(document.froms['meineFrom'].box1.checked === true)

        
      3 mal ===? iss ja der Hammer, aber klappt :)  
        
      Danke!
      
      1. Jep dreimal =

        = ist ein Zuweisungsoperator
        == ist ein Vergleichsoperator mit automatischer Typen-Konvertierung
        === ist ein Vergleichsoperator ohne Typen-Konvertierung

        Wie "Der Martin" aber schon schrieb kannst du den Teil "=== true" in diesem Fall auch gleich weglassen.

    3. servus 1UnitedPower,

      if(document.froms['meineFrom'].box1.checked === true)

        
      \*forms  
      dreifaches = ist nicht notwendig. siehe <http://de.selfhtml.org/javascript/objekte/elements.htm#checked@title=hier>.  
        
      PS: Du kannst statt `document.forms['foo'].bar.checked`{:.language-javascript} auch `document.foo.bar.checked`{:.language-javascript} schreiben.  
      Is schneller, find ich ;)  
        
        
      der wurzelbert
      
      -- 
      "The depressing thing about tennis is that no matter how good I get, I´ll never be as good as a wall."
      
      1. dreifaches = ist nicht notwendig. siehe http://de.selfhtml.org/javascript/objekte/elements.htm#checked@title=hier.

        Nicht notwenig, aber schneller und ohnehin empfehlenswert.

        1. Nicht notwenig, aber schneller und ohnehin empfehlenswert.

          if (prop === true) soll schneller sein als if (prop),vor allem wenn prop bekanntermaßen ein Boolean ist?

          Das halte ich für ein Gerücht.

          Mathias

          1. if (prop === true) soll schneller sein als if (prop),vor allem wenn prop bekanntermaßen ein Boolean ist?

            Das halte ich für ein Gerücht.

            Nein und darum ging es auch nicht.
            Nur darum, dass der exakt-gleich-Operator (===) schneller arbeitet als der einfache gleich-Operator (==), weil keine Typenkonvertierung vorgenommen werden muss.

            Das Weglassen eines Vergleichsoperators an dieser Stelle ist natürlich noch schneller.