Bewahrer: <table> zerstört <form>

Beitrag lesen

Hi mal wieder,

Ich benutze ein paar <form>'s, die ich mit <table> ordentlich positioniere. Funktionieren tut alles, ich kann Daten wunderbar in die DB eintragen. Nun hab ich aber folgendes Problem:

Ich hab eine Funktion in JS geschrieben, die dafür sorgen soll, dass bei Auswählen eines anderen Monats / Jahres in der <form> die <select> Liste der möglichen Tage neu geladen wird. Schließlich hat nicht jeder Monat 31 Tage. So wird das ganze aufgerufen:

<script type="text/javascript">  
     var Month = document.getElementById('InputMonth');  
     Month.onchange = function() {  
          updateTimePicker('Input');  
     }  
     var nYear = document.getElementById('InputYear');  
     Year.onchange = function() {  
          updateTimePicker('Input');  
     }  
</script>

Die Funktion ist folgende:

function updateTimePicker(id) {  
     // Gets the correct possible date range based on the picked month and picked year  
     var Form = document.getElementById(id);  
     console.log(Form);  
  
     if(Form !== null) {  
          alert(Form.getElementsByTagName('select')[1]);  
          var Month = Form.getElementsByTagName('select')[1].selectedIndex;  
          var Year = Form.getElementsByTagName('select')[2].selectedIndex;  
          var Days = new Date(Year,Month+1,0).getDate();  
  
          // Update day list  
          var TimeDay = Form.getElementsByTagName('select')[0];  
          TimeDay.innerHTML = ''; // Remove old day list  
  
          for(var i=0;i<Days;i++) {  
               // Add days  
               var TimeDayOption = document.createElement('option');  
               TimeDayOption.value = i + 1;  
               TimeDayOption.text = i + 1;  
               TimeDay.appendChild(TimeDayOption);  
          }  
          TimeDay.selectedIndex = 0; // Select the 1st of the new month / year  
     }  
     else {  
          return false;  
     }  
}

Soweit so gut. Das ist alles nur um sicherzustellen, dass keine nicht-existenten Daten eingetragen werden können. Wenn ich nun einen anderen Monat in der <select> Box auswähle, passieren 2 Dinge. Einmal wird console.log() aufgerufen und die <form> wird entsprechend geloggt. Andererseits wird mir beim alert() Testoutput einfach nur undefined ausgegeben. Kurzes Überprüfen der Element Struktur und schon war der Fehler gefunden:

<table>  
<form action="index.php?s=cinput" id="Input" method="POST"></form>  
<tbody>...</tbody>  
</table>

Laut den Chrome Developer Tools liegt tbody und damit die gesamten <select> Boxen AUSSERHALB der eigentlichen <form>. Daten können trotzdem eingetragen werden. Und wenn das Ding außerhalb der Form liegt, kann ich mit Form.getElementyByTagName('select')[0] natürlich nicht auf die <select> Boxen zugreifen. Ok. Soweit hab ich das verstanden. Wieso kann ich dann aber trotzdem Daten eintragen, und WIESO sieht mein .php File so aus:

<table>  
<form action="index.php?s=cinput" id="Input" method="POST">  
	<tr>  
		<td><select name="KDay" id="InputDay" size="1">  
          <?php  
		for($i=1;$i<=$PossibleDays;$i++) {  
			if($i == $Day) {  
                    ?>  
                    <option selected="selected" value="<?=$i?>"><?=$i?></option>  
                    <?php  
			}  
			else {  
                    ?>  
                    <option value="<?=$i?>"><?=$i?></option>  
                    <?php  
			}  
		}  
		?>  
		</select></td>  
  		<td><select name="KMonth" id="InputMonth"  size="1">  
          <?php  
		for($i=0;$i<12;$i++) {  
			if(($i+1) == $Month) {  
                    ?>  
                    <option selected="selected" value="<?=($i+1)?>"><?=$Months[$i]?></option>  
                    <?php  
			}  
			else {  
                    ?>  
                    <option value="<?=($i+1)?>"><?=$Months[$i]?></option>  
                    <?php  
			}  
		}  
		?>  
		</select></td>  
		<td><select name="KYear" id="InputYear" size="1">  
          <?php  
		for($i=2010;$i<=$Year;$i++) {  
			if($i == $Year) {  
                    ?>  
                    <option selected="selected" value="<?=$i?>"><?=$i?></option>  
                    <?php  
			}  
			else {  
                    ?>  
                    <option value="<?=$i?>"><?=$i?></option>  
                    <?php  
			}  
		}  
		?>  
		</select></td>  
		<td><input type="submit" value="Eintragen" /></td>  
	</tr>  
</form>  
</table>

Hieraus wird doch 100% ersichtlich, DASS ich die <select> Boxen INNERHALB der <form> Struktur anlege??? Was übersehe ich hier?

Vielen Dank!