Sabine: Ein Wert im Array = kein Array?

Hallöchen!

Wie ihr wahrscheinlich gleich an meiner Frage bemerkt, gehöre ich nicht wirklich zu den Profis in Javascript, bin aber dabei es mir so langsam anzueignen.

Nun habe ich heute mit einigen Hilfen aus dem Archiv folgendes gezaubert:

Der Javascriptteil:

var emails=new Array()
var j=0;
d=document.forms[0].elements['mail[]'];
for(i=0;i<d.length;i++){
if(d[i].checked)
{emails[j]="ja_"+document.forms[0].elements['mail[]'][j].value;}
else
{emails[j]="ne_"+document.forms[0].elements['mail[]'][j].value;}
j++;}

und im HTML-Teil habe ich einige Checkboxen mit der Syntax
<input type=checkbox name="mail[]" value="$email">
.
.
.

Nun soll folgendes passieren: An erster Stelle habe ich ein Select-Field - je nachdem was hier ausgewählt wird, werden dann 1 bis x E-mail-Adressen mit der oben angeführten Checkbox ausgegeben. Dann habe ich noch die Möglichkeit des Speicherns auf der Seite - wenn ich speichere wird der oben angeführte Javascript-Teil abgearbeitet, die Variable emails an den Url angehängt und dann gehts weiter zu einem PHP-Teil, der die emails speichert.

So weit so gut - das klappt alles wunderbar. Mein Problem tritt auf wenn ich nur eine Checkbox habe, denn dann passiert gar nichts. Kann es sein, dass Javascript dann kein Array anlegt, weil ich nur einen Wert drinnen habe?
Ich habe schon auf verschiedenste Arten versucht, den Value der Checkbox testweise auszugeben wenn eben nur eine Checkbox da ist, alles vergeblich.
z.B. liefert mir document.write(document.forms[0].elements['mail[]'][0].value); als Ergebnis: eben dieses sei kein Objekt oder Null.

Weiß jemand wo ich hier einen Fehler habe oder wie ich dafür sorgen kann, dass obiges Javascript auch arbeitet, wenn es nur eine Checkbox gibt?

Herzlichen Dank im Voraus!
Schöne Grüße
Sabine

  1. Hallo,

    So weit so gut - das klappt alles wunderbar. Mein Problem tritt auf wenn ich nur eine Checkbox habe, denn dann passiert gar nichts. Kann es sein, dass Javascript dann kein Array anlegt, weil ich nur einen Wert drinnen habe?

    Das document.forms[...].elements["name"]-Array existiert ja bereits, nur wird die zweite Dimension erst bei mehr als einem Formularelement mit diesem Namen eroeffnet. Frage also die Laenge dieses Arrays entsprechend ab und passe die Schleife an.

    MfG, Thomas

    1. Hallo Thomas!

      Hallo,

      So weit so gut - das klappt alles wunderbar. Mein Problem tritt auf wenn ich nur eine Checkbox habe, denn dann passiert gar nichts. Kann es sein, dass Javascript dann kein Array anlegt, weil ich nur einen Wert drinnen habe?

      Das document.forms[...].elements["name"]-Array existiert ja bereits, nur wird die zweite Dimension erst bei mehr als einem Formularelement mit diesem Namen eroeffnet. Frage also die Laenge dieses Arrays entsprechend ab und passe die Schleife an.

      Ich weiß nicht ob ich jetzt das gleiche meine wie du, ich habe folgendes versucht (angehängt an den Javascript-Teil von oben):
      if(j==0)
      {
      var emails
      emails="ja_"+document.forms[0].mail[0].value;}
      j habe ich vor der Schleife mit 0 definiert, in der Schleife wird ja dann jedesmal eines nach oben gezählt. Wenn ich hier also nicht in die Schleife komme, müsste es ja 0 sein oder?
      Der Fehlermeldung :) nach zu schließen komme ich auch in die Abfrage mit if (j==0), dann bekomme ich aber die Fehlermeldung, dass document.forms..... kein Objekt ist, habs auch mit document.forms[0].mail.value versucht, ebenso mit document.forms[0].elements['mail[]'].value etc. Überall das gleiche Ergebnis.

      Ich nehme an, ich habe deinen Tipp falsch verstanden. Würde mich freuen, wenn du es mir nochmal für Javascript-Dummies erklären könntest. Danke!

      Sabine

      MfG, Thomas

      1. Hallo,

        Der Fehlermeldung :) nach zu schließen komme ich auch in die Abfrage mit if (j==0), dann bekomme ich aber die Fehlermeldung, dass document.forms..... kein Objekt ist, habs auch mit document.forms[0].mail.value versucht, ebenso mit document.forms[0].elements['mail[]'].value etc. Überall das gleiche Ergebnis.

        document.forms[0].elements['mail[]'].value sollte auch bei einem Element mit name="mail[]" existieren.

        Ich nehme an, ich habe deinen Tipp falsch verstanden. Würde mich freuen, wenn du es mir nochmal für Javascript-Dummies erklären könntest. Danke!

        Probiere es mal so:

        var mail=document.forms[0].elements['mail[]'];
        if(mail.length==1)
        {
          // mache etwas mit mail.value;
        }
        else if(mail.length>1)
        {
          // mache etwas mit mail[index_ab_0].value;
        }

        MfG, Thomas

        1. Hallo Thomas!

          Danke erstmal für die Erklärung. Leider klappt es aber noch immer nicht - ich habe es so wie von dir beschrieben gemacht. Habe nun mal Testweise bei der Abfrage if(mail.length==1)
          {var emails="ja";}
          eingegeben. Der Wert den ich hier eingebe, wird normalerweise in der Datenbank gespeichert (dies funktioniert bei mehr als einer Checkbox). Diesmal kam zwar keine Fehlermeldung - ich schaue in die Datenbank und hier steht anstelle "ja" "undefined".

          document.forms[0].elements['mail[]'].value sollte auch bei einem Element mit name="mail[]" existieren.

          Nun ich habe folgendes versucht:
          document.write(mail.length); => und siehe da, auch hier erscheint undefined.

          var mail=document.forms[0].elements['mail[]'];

          (Habe auch den Variablennamen abgeändert in mailanzahl um hier Fehler auszuschließen, ebenso das gleiche Ergebnis).
          Hast du vielleicht noch irgendeine Idee, was hier schieflaufen könnte?

          LG und Danke im Voraus!
          Sabine

          1. Hallo,

            eingegeben. Der Wert den ich hier eingebe, wird normalerweise in der Datenbank gespeichert (dies funktioniert bei mehr als einer Checkbox). Diesmal kam zwar keine Fehlermeldung - ich schaue in die Datenbank und hier steht anstelle "ja" "undefined".

            Sorry, war ein falscher Ansatz. wenn kein Array gebildet wird, dann kann man auch nicht dessen Laenge abfragen.

            Hast du vielleicht noch irgendeine Idee, was hier schieflaufen könnte?

            Neuer Versuch:

            <form action="">
            <input type="checkbox" name="mail[]" value="Checkbox 1">
            <input type="checkbox" name="mail[]" value="Checkbox 2">
            <input type="checkbox" name="mail[]" value="Checkbox 3">
            <input type="button" value="Test" onclick="j=0;d=document.forms[0].elements;for(i=0;i<d.length;i++){if(d[i].name=='mail[]')j++};for(i=0;i<j;i++){alert(document.forms[0].elements[i].value)}">
            </form>

            Das Abfragen des Wertes klappt mit einem oder mehreren Checkboxen. j liefert die Anzahl der Checkboxen mit name="mail[]".

            MfG, Thomas