есть на странице три списка year,moth,day -год ,месяц и день соответственно.Надо вывести дни в месяце учитывая высокосный год .Я сделал так: [js]if (document.all.moth.options[document.all.moth.selectedIndex].value==0) {document.all.day.disabled=true;}else {document.all.day.disabled=false; newOption = document.createElement("OPTION"); newOption.text ="День не выбран"; newOption.value = 0; document.all.day.options.add(newOption,1);} moths=new Array(13); moths[1]=31; moths[3]=31; moths[4]=30; moths[5]=31; moths[6]=30; moths[7]=31; moths[8]=31; moths[9]=30; moths[10]=31; moths[11]=30; moths[12]=31; if ( (document.all.year.options[document.all.year.selectedIndex].value % 4)==0) { moths[2]=29;}else {moths[2]=28;} for (x=1;x<= moths[document.all.moth.options[document.all.moth.selectedIndex].value+1]+1; x++ ) { newOption = document.createElement("OPTION"); newOption.text =x; newOption.value = x; document.all.day.options.add(newOption,x); } [/js] Вот прикол дни января выводятся. А вместо остальных-день не выбран.В чём ошибка?
в голове : [js]<script language Javascript> function btday () { for (i = document.all.day.options.length ; i >= 1 ; i--) document.all.day.options.remove(i); if (document.all.year.options[document.all.year.selectedIndex].value==0) {document.all.moth.disabled=true;}else {document.all.moth.disabled=false;} if (document.all.moth.options[document.all.moth.selectedIndex].value==0) {document.all.day.disabled=true;}else {document.all.day.disabled=false; newOption = document.createElement("OPTION"); newOption.text ="День не выбран"; newOption.value = 0; document.all.day.options.add(newOption,1);} moths=new Array(13); moths[1]=31; moths[3]=31; moths[4]=30; moths[5]=31; moths[6]=30; moths[7]=31; moths[8]=31; moths[9]=30; moths[10]=31; moths[11]=30; moths[12]=31; if ( (document.all.year.options[document.all.year.selectedIndex].value % 4)==0) { moths[2]=29;}else {moths[2]=28;} for (x=1;x<= moths[document.all.moth.options[document.all.moth.selectedIndex].value+1]+1; x++ ) { newOption = document.createElement("OPTION"); newOption.text =x; newOption.value = x; document.all.day.options.add(newOption,x); } } </script>[/js] код формы : HTML: ..... <form action="" method="post" enctype="multipart/form-data" name="form1"> <tr><td bgcolor="#FFFFCC"> </td> <td bgcolor="#FFFFCC"><p> <select name="day" id="day" > </select> <select name="moth" id="moth" onChange="btday ()" > <option value="0">месяц не выбран</option> <option value="1">январь</option> <option value="2">февраль</option> <option value="3">март</option> <option value="4">апрель</option> <option value="5">май</option> <option value="6">июнь</option> <option value="7">июль</option> <option value="8">август</option> <option value="9">сентябрь</option> <option value="10">октябрь</option> <option value="11">ноябрь</option> <option value="12">декабрь</option> </select> <select name="year" id="year" onChange="btday ()"> <? $d=date ("Y"); $l=$d-16; $m=$d-60; echo (" <option value= 0 >год не выбран </option> "); while ($m<=$l) { echo (" <option value= $m > $m </option> "); $m++;} ?> </select> </p> <script language="javascript" type="text/javascript" > document.all.moth.disabled=true; document.all.day.disabled=true; </script> <p class="coment"> </p></td> </tr> ... [/html]
document.all..... Народ, это не везде вообще пашет. document.getElementById('year/month/day').... Вот так надо работать. Универсально и удобно.
разгребаем: заменяем это Код (Text): for (x=1;x<= moths[document.all.moth.options[document.all.moth.selectedIndex].value+1]+1; x++ ) { на это Код (Text): var m = document.all.moth var v = m.options[m.selectedIndex].value var cnt = moths[v+1]+1 if (!cnt) alert([cnt, m.selectedIndex, v, v+1, moths[v+1]]) for (x=1;x<=cnt ; x++ ) { результат - при выборе февраль - alert([NaN,2,2,21,]) т.е. в v+1 "v" строкавая переменная, а "2"+1 == "21" решение: for (x=1;x <= moths[parseInt(document.all.moth.options[document.all.moth.selectedIndex].value)+1]+1; x++ ) {
Всем большое спасибо. и особенно Ti за то,что не только показал как надо сделать но и объяснил почему не работает