以下代碼根據表單中選定的月份驗證月份的天數。月份值從1月到12月,從1日到31日和從1900年到2010年。我試圖做一個非常小的變化,我想在三個下拉框中的每一個添加第一個選項,一個空白選擇選項或例如破折號。因此月份下降的第一個選項是 - 而不是1月。爲此,我在每個下拉列表中添加以下行。javascript請求小幫助
<option value=""> - </option>
但是,通過添加它,它不會正確顯示一月和二月的天數(它顯示比它應該少一天)。這是一些JavaScript問題,但我不明白什麼是錯的。如果你能幫助我,我將非常感激。 下面是HTML,Javascript和PHP填充表單的完整代碼。
<?php
$monthOptions = '';
$dayOptions = '';
$yearOptions = '';
for($month=1; $month<=12; $month++){
$monthName = date("M", mktime(0, 0, 0, $month));
$monthOptions .= "<option value=\"{$month}\">{$monthName}</option>\n";
} for($day=1; $day<=31; $day++){
$dayOptions .= "<option value=\"{$day}\">{$day}</option>\n";
} for($year=1900; $year<=2010; $year++){
$yearOptions .= "<option value=\"{$year}\">{$year}</option>\n";
}
?>
<html>
<head>
<script type="text/javascript">
function updateDays()
{
//Create variables needed
var monthSel = document.getElementById('month');
var daySel = document.getElementById('day');
var yearSel = document.getElementById('year');
var monthVal = monthSel.value;
var yearVal = yearSel.value;
//Determine the number of days in the month/year
var daysInMonth = 31;
if (monthVal==2){
daysInMonth = (yearVal%4==0 && (yearVal%100!=0 || yearVal%400==0)) ? 29 : 28;
} else if (monthVal==4 || monthVal==6 || monthVal==9 || monthVal==11) {
daysInMonth = 30;
}
//Add/remove options from days select list as needed
if(daySel.options.length > daysInMonth){ //Remove excess days, if needed
daySel.options.length = daysInMonth;
} while (daySel.options.length != daysInMonth){ //Add additional days, if needed
daySel.options[daySel.length] = new Option(daySel.length+1, daySel.length+1, false);
}
return;
}
</script>
</head>
<body>
Birthdate:<br />
<select name="month" id="month" onchange="updateDays();">
<?php echo $monthOptions; ?>
</select>
<select name="day" id="day">
<?php echo $dayOptions; ?>
</select>
<select name="year" id="year" onchange="updateDays();">
<?php echo $yearOptions; ?>
</select>
</body>
</html>
感謝您的任何幫助。