IE und for-in Schleife mit Cheackboxen/Radiobuttons...

K

koli.bri

IE und for-in Schleife mit Checkboxen/Radiobuttons...

Hallo.

es eilt ein wenig, daher nur kurz:

Der HTML-Anguck-Müll aus dem Hause Microsoft verhält sich mir gegenüber vollkommen unangemessen unverständlich. Das der nicht laut lacht ist auch schon alles :koch:

Aber gut, der Fehler liegt ja meist vor dem Bildschirm, nicht da drunter...

Also, hier mein Script:
JavaScript:
PHP:
  function cpy(arg){
    return arg;
  }


  function check_antwort2(frage){
      var fehler = 0;
  //    alert(document.forms[frage].elements["a" + frage][1].type);

    tmparr = cpy(document.forms[frage].elements["a" + frage]);
  //  alert(tmparr[0].type);
    for(var key in tmparr){
    // alert(key + "#" + tmparr[key]);
      if("checkbox" == tmparr[key].type){
      //   alert("hie");
       if(
          (true == tmparr[key].checked
          && 1 == tmparr[key].value)
        ||
         (false == tmparr[key].checked
          && 0 == tmparr[key].value)
       ){
        // Antwort ist richtig

      }else{
        // Antwort ist falsch
        fehler++;
      }
     }
    }
    if(0 == fehler){
    // Alle Antworten richtig
      document.getElementById("t" + frage).innerHTML = "Alles Richtig";
    }else{
    // Mindestens eine Falsche Antwort
      document.getElementById("t" + frage).innerHTML = "es sind noch " + fehler + " Falsche Antworten da";
    }
    return false;
  }

HTML-Snippet
HTML:
  <a name="lfrage1">&nbsp;</a>
  <form action="#frage1" name="frage1" onSubmit="return check_antwort2(this.name)">
  <p>Hier eine Frage -.-<br>
    <input type="checkbox" name="afrage1" value="0"> Antw.0(falsch) <br>
    <input type="checkbox" name="afrage1" value="1"> Antw.1(richtig) <br>
    <input type="checkbox" name="afrage1" value="1"> Antw.2(Richtig) <br>
    <input type="checkbox" name="afrage1" value="0"> Antw.3(falsch) <br>
    <input type="submit" value="Absenden"><br></p>
    <p id="tfrage1"></p>

  </form>


Ziel ist eine Simple Überprüfung, ob die Frage richtig beantwortet worden ist. Ganz simpel.

In den Values der Checkboxen ist vermerkt, ob die Antwort richtig(1)/falsch(0) ist.

Die Idee ist, dass der in einer Schleife jedes Checkbox-Element durchläuft, guckt, ob es makiert ist, und anhand der Value dann guck, ob das markiert/nicht markiert richtig ist.
Wenn nicht, wird eine Fehler-Variable erhöht und danach die Anzahl der Fehler ausgegeben.

Im Grunde ganz einfach, der FireFox kommt auch super damit klar...

Nur der Internet Explorer weigert sich irgendwie, in die Abfrage nach dem Typ zu gehen (die Notwendig ist, sonst nimmt der die Eigenschaft length auch noch mit in die Verarbeitung -> Ein Fehlerpunkt, der nicht sein soll)


Also, wo liegt der Fehler?

lieben Gruß
Lukas
 
Zuletzt bearbeitet von einem Moderator:
&& 1 == tmparr[key].value ??

muss es nicht

&& tmparr[key].value == 1

heißen?
 
&& 1 == tmparr[key].value ??

muss es nicht

&& tmparr[key].value == 1

heißen?

Was auf welcher Seite steht ist im Grunde egal. Es wird ja nichts zugewiesen, sondern verglichen.

Das der "Feste" Wert Links steht, hab ich mir angewöhnt, damit der, sollte ich mal ein "=" vergessen, der Abbricht, und den Befehl nicht als Zuweisung interpretiert :)


Was ich aber herausgefunden habe:

Der IE scheint einfach nur das falsche Array zu durchlaufen.
Auf jeden Fall sind die Schlüssel des Arrays, was mit der For-In-Schleife durchgelaufen wird, NICHT die Nummern, sondern die name's der Checkboxen.


Anders forumuliert:
"Normal" ist es ja, dass Checkboxengruppen in JavaScript in ein Array "gewandelt" werden. Sprich, mehrere Elemente mit dem selben name-Atribut werden mit JavaScript so angesprochen:
PHP:
document.forms['formname'].elements['chkboxgruppenname'][lfnd.nummer]

Aber der IE macht da irgendwie was anderes draus...

Ich verzeifle langsam, nicht mal auf SELFHTML wird auf sowas hingewiesen...
Dabei sollte das heute noch fertig werden!!!

gruß
Lukas
 
Dann weiß ich es momentan auch nicht... :(
 
Richtig Merkwürdig:

Auch wenn ich mir die Checkboxen mit document.getElementyByName("a" + frage) hole, bekomme ich die name's der Checkboxen als Schlüssel zurück...

Was macht der IE da? Und warum blick ich nicht da durch?

gruß
Lukas
 
Zurück
Oben Unten