Johannes Vogel: JS-Zugriff auf Array-Formfeld ergibt undefined object

Beitrag lesen

Hi Leute

Folgendes Problem lässt sich von mir einfach nicht selbst lösen.
Per PHP generiere ich ein umfangreiches Eingabeformular, welches u.a. auch ein oder mehrere Datumsfeld(er) beinhaltet. Um diese darzustellen, verwende ich zwei PullDown-Listen (Tage/Monate) und ein Text-Eingabefeld für das Jahr. Zusätzlich möchte ich gerne das vollständige Datum in der ISO-Form YYYY-MM-DD in einem hidden-Feld speichern. Dieses wird dann auch wieder ins PHP-Script zurückgegeben und weiter verarbeitet. Ein Bild, um sich alles vorstellen zu können, liegt bei.

Nun möchte ich, um falsche Daten im Vornherein abwenden zu können, die Tag-Liste dynamisch erweitern und kürzen. Dazu verwende ich das abgeänderte Beispiel aus SelfHTML. Problematisch dabei ist aber, dass ich Arrays für die Definition der Formularfelder benutze. Diese benötige ich einerseits, um auch mehrere Datum-Felder in einem Formular auseinander halten zu können, andererseits erleichtert dies die Datenübergabe zu PHP enorm. Leider werden aber diese Arrays von JavaScript nicht erkannt. Es tritt bei der Änderung eines Feldes in IE (6) wie auch im Netscape (7) der Fehler "DayObjValues ist undefiniert" (Monatsfeld) oder auch "ObjValues ist undefiniert" (Day-Feld) auf.

<form name="mypage" action="mypage.php" method="post">
<input type="hidden" name="ObjValues[54]" value="" />
<select name="DayObjValues[54]" size="1" onchange="
/* update des übergabefeldes */
ObjValues[54].value = YearObjValues[54].value+'-'+MonthObjValues[54].value+'-'+DayObjValues[54].value;">
 <option value="0"></option>
 <option value="1">1</option>
 :        :        :        :
 <option value="31">31</option>
</select>
<select name="MonthObjValues[54]" size="1" onchange="
 /* einige vereinfachungen */
 dobj=DayObjValues[54];
 m=MonthObjValues[54].options[MonthObjValues[54].selectedIndex].value;
 y = YearObjValues[54].value;
 /* prüfe anzahl tage der monat hat */
 if (m==2) { d = ((y/4==Math.floor(y/4)) && (y/100!=Math.floor(y/100)) || (y/400==Math.floor(y/400))) ? 29 : 28; }
 else { d = ((m<=7 && m/2!=Math.floor(m/2)) || (m>=8 && m/2==Math.floor(m/2))) ? 31 : 30; }
 /* ändere die anzahl felder der tag-box */
if (dobj.length < d) { for (i = dobj.length+1; i<=d; i++) dobj.options[dobj.length] = new Option(i,i,false,false); }
 else { for (i = dobj.length; i>d; i--) dobj.options[dobj.length-1] = null; }
 /* update des übergabefeldes */
 ObjValues[54].value = YearObjValues[54].value+'-'+MonthObjValues[54].value+'-'+DayObjValues[54].value;">
 <option value="0"></option>
 <option value="1">Januar</option>
 :       :         :      :      :
 <option value="12">Dezember</option>
</select>
<input type="text" name="YearObjValues[54]" value="" size="4" onchange="(((gleich wie MonthObjValues[54].onchange)))" />
</form>

Vielen Dank für jegliche Hilfe (oder aufmunternde Worte :)
Johannes Vogel