За последние 24 часа нас посетили 17497 программистов и 1293 робота. Сейчас ищут 2089 программистов ...

Вывод месяца

Тема в разделе "JavaScript и AJAX", создана пользователем DekaR, 5 апр 2007.

  1. DekaR

    DekaR Активный пользователь

    С нами с:
    18 ноя 2006
    Сообщения:
    52
    Симпатии:
    0
    есть на странице три списка 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]
    Вот прикол дни января выводятся. А вместо остальных-день не выбран.В чём ошибка?
     
  2. Ti

    Ti Активный пользователь

    С нами с:
    3 июл 2006
    Сообщения:
    2.378
    Симпатии:
    1
    Адрес:
    d1.ru, Екатеринбург
    минимальный "рабочий" код в студию, вместе с html
     
  3. DekaR

    DekaR Активный пользователь

    С нами с:
    18 ноя 2006
    Сообщения:
    52
    Симпатии:
    0
    в голове :
    [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:
    1.  
    2. .....
    3.  <form action="" method="post" enctype="multipart/form-data" name="form1">
    4.  
    5. <tr><td bgcolor="#FFFFCC">&nbsp;</td>
    6.         <td bgcolor="#FFFFCC"><p>
    7.           <select name="day" id="day"  >
    8.           </select>
    9.             <select name="moth" id="moth" onChange="btday ()" >
    10.               <option value="0">месяц не выбран</option>
    11.               <option value="1">январь</option>
    12.               <option value="2">февраль</option>
    13.               <option value="3">март</option>
    14.               <option value="4">апрель</option>
    15.               <option value="5">май</option>
    16.               <option value="6">июнь</option>
    17.               <option value="7">июль</option>
    18.               <option value="8">август</option>
    19.               <option value="9">сентябрь</option>
    20.               <option value="10">октябрь</option>
    21.               <option value="11">ноябрь</option>
    22.               <option value="12">декабрь</option>
    23.             </select>
    24.             <select name="year" id="year" onChange="btday ()">
    25.               <?
    26.            $d=date ("Y");
    27.            $l=$d-16;
    28.            $m=$d-60;
    29.            echo (" <option value= 0 >год не выбран  </option> ");
    30.            while ($m<=$l) {
    31.          echo (" <option value= $m > $m  </option> ");
    32.            $m++;}
    33.          
    34.            
    35.            ?>
    36.              
    37.         </select>
    38.        
    39.         </p> <script language="javascript" type="text/javascript" >
    40.         document.all.moth.disabled=true;
    41.         document.all.day.disabled=true;
    42.          </script>
    43.           <p class="coment">&nbsp;</p></td>
    44. </tr>
    45. ...
    46.  
    47.  
    [/html]
     
  4. Psih

    Psih Активный пользователь
    Команда форума Модератор

    С нами с:
    28 дек 2006
    Сообщения:
    2.678
    Симпатии:
    6
    Адрес:
    Рига, Латвия
    document.all.....

    Народ, это не везде вообще пашет.


    document.getElementById('year/month/day')....
    Вот так надо работать. Универсально и удобно.
     
  5. DekaR

    DekaR Активный пользователь

    С нами с:
    18 ноя 2006
    Сообщения:
    52
    Симпатии:
    0
    Psih ну не в этом суть.Спасиьо за совет.теперь буду так делать,но почему не всё работает ???
     
  6. Ti

    Ti Активный пользователь

    С нами с:
    3 июл 2006
    Сообщения:
    2.378
    Симпатии:
    1
    Адрес:
    d1.ru, Екатеринбург
    разгребаем:

    заменяем это
    Код (Text):
    1. for (x=1;x<= moths[document.all.moth.options[document.all.moth.selectedIndex].value+1]+1; x++ ) {
    на это
    Код (Text):
    1.  
    2.     var m = document.all.moth
    3.     var v = m.options[m.selectedIndex].value
    4.     var cnt = moths[v+1]+1
    5.     if (!cnt) alert([cnt, m.selectedIndex, v, v+1, moths[v+1]])
    6.     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++ ) {
     
  7. DekaR

    DekaR Активный пользователь

    С нами с:
    18 ноя 2006
    Сообщения:
    52
    Симпатии:
    0
    Всем большое спасибо. и особенно Ti за то,что не только показал как надо сделать но и объяснил почему не работает