0

月と年の日に3つのドロップダウンを作成しました{1,2,3...}有効な日のみがドロップダウンに表示されるようにします。つまり、janが選択されている場合は31が上限であり、febが選択されている場合は年に応じて28または29になります(飛躍するかどうか)。

var monthselected,yearselected,mtype=0,visited=0;
function reassembleDate(){
if(monthselected==4||monthselected==6||monthselected==9||monthselected==11)
                            {mtype=30;}
                        if(monthselected==2&&isleapyear(yearselected))
                            {mtype=29;}
                        if(monthselected==2&&!isleapyear(yearselected))
                            {mtype=28;}

                        else if(mtype==0){mtype=31;} 
                            removeOptions();
                           addOptions(mtype);}                          
function removeOptions(){
var x=document.getElementById('dayselect');
while(x.length>29)
    { x.remove(x.length-1);}
    }

function addOptions(mtype)
{
//alert('initialising');
var i;
for(i=29;i<=mtype;i++)
{
var x=document.getElementById("dayselect");
    var option=document.createElement("option");

option.text=i;
try
  {//alert('trying');
  // for IE earlier than version 8
  x.add(option,x.options[null]);
  }
catch (e)
  {//alert('catching');
  x.add(option,null);
  }
}
}                           
function isleapyear(year){
        if((year%4)==0)
        {
        if((year%100)!=0)
        {
        return true;
        }
        else return false;
        }
        if((year%400)==0)
            {

            return true;

            }

else return false;
}                       







<td><select  id="month" name="month" class="int" onChange="reassembleDate();"   onBlur="monthselected=document.getElementById('month').value; reassembleDate();"        >
                        <option value="">Month</option>
                        <option value="01" >January</option>
                        <option value="02" >  February</option>
                        <option value="03" >  March</option>
                        <option value="04" >  April</option>
                        <option value="05" >  May</option>
                        <option value="06" >  June</option>
                        <option value="07" >  July</option>
                        <option value="08" >  August</option>
                        <option value="09" >  September</option>
                        <option value="10" >  October</option>
                        <option value="11" >  November</option>
                        <option value="12" >  December</option>
                        </select>

<label id="year-label" class="year int">  Year</label>
  <select class="int" id="year" name="year" onChange="reassembleDate();" onBlur="yearselected=document.getElementById('year').value; reassembleDate();"><option value="0" >YYYY</option>
<?php for($i=2012;$i>1912;$i--){echo "<option value=\"$i\">$i</option>";} ?>            </select>
<label id="day-label" class="day int">Day</label><select id="dayselect" class="int" name="day" >
<option value="0" >  DD</option>
<?php for($i=1;$i<29;$i++){echo "<option value=\"$i\">$i</option>";} ?></select>

最大2つの変更がある場合、コードは正常に機能しますが、その後はdate {1,2,3 ...}のリストは変更されません。なぜこれが発生するのですか?onChangeやonBlurなどのすべてのイベントの日付を変更しようとしましたが、役に立ちません。

生成されたhtml

Birthday</td><td><select  id="month" name="month" class="int" onChange="reassembleDate();"  onBlur="monthselected=document.getElementById('month').value; reassembleDate();"        >
                        <option value="">Month</option>
                        <option value="01" >January</option>
                        <option value="02" >  February</option>
                        <option value="03" >  March</option>
                        <option value="04" >  April</option>
                        <option value="05" >  May</option>
                        <option value="06" >  June</option>
                        <option value="07" >  July</option>
                        <option value="08" >  August</option>
                        <option value="09" >  September</option>
                        <option value="10" >  October</option>
                        <option value="11" >  November</option>
                        <option value="12" >  December</option>
                        </select>

                        <label id="year-label" class="year int">
  Year</label>
  <select class="int" id="year" name="year" onChange="reassembleDate();" onBlur="yearselected=document.getElementById('year').value; reassembleDate();"><option value="0" >YYYY</option>
                                <option value="2012">2012</option><option value="2011">2011</option><option value="2010">2010</option><option value="2009">2009</option><option value="2008">2008</option><option value="2007">2007</option><option value="2006">2006</option><option value="2005">2005</option><option value="2004">2004</option><option value="2003">2003</option><option value="2002">2002</option><option value="2001">2001</option><option value="2000">2000</option><option value="1999">1999</option><option value="1998">1998</option><option value="1997">1997</option><option value="1996">1996</option><option value="1995">1995</option><option value="1994">1994</option><option value="1993">1993</option><option value="1992">1992</option><option value="1991">1991</option><option value="1990">1990</option><option value="1989">1989</option><option value="1988">1988</option><option value="1987">1987</option><option value="1986">1986</option><option value="1985">1985</option><option value="1984">1984</option><option value="1983">1983</option><option value="1982">1982</option><option value="1981">1981</option><option value="1980">1980</option><option value="1979">1979</option><option value="1978">1978</option><option value="1977">1977</option><option value="1976">1976</option><option value="1975">1975</option><option value="1974">1974</option><option value="1973">1973</option><option value="1972">1972</option><option value="1971">1971</option><option value="1970">1970</option><option value="1969">1969</option><option value="1968">1968</option><option value="1967">1967</option><option value="1966">1966</option><option value="1965">1965</option><option value="1964">1964</option><option value="1963">1963</option><option value="1962">1962</option><option value="1961">1961</option><option value="1960">1960</option><option value="1959">1959</option><option value="1958">1958</option><option value="1957">1957</option><option value="1956">1956</option><option value="1955">1955</option><option value="1954">1954</option><option value="1953">1953</option><option value="1952">1952</option><option value="1951">1951</option><option value="1950">1950</option><option value="1949">1949</option><option value="1948">1948</option><option value="1947">1947</option><option value="1946">1946</option><option value="1945">1945</option><option value="1944">1944</option><option value="1943">1943</option><option value="1942">1942</option><option value="1941">1941</option><option value="1940">1940</option><option value="1939">1939</option><option value="1938">1938</option><option value="1937">1937</option><option value="1936">1936</option><option value="1935">1935</option><option value="1934">1934</option><option value="1933">1933</option><option value="1932">1932</option><option value="1931">1931</option><option value="1930">1930</option><option value="1929">1929</option><option value="1928">1928</option><option value="1927">1927</option><option value="1926">1926</option><option value="1925">1925</option><option value="1924">1924</option><option value="1923">1923</option><option value="1922">1922</option><option value="1921">1921</option><option value="1920">1920</option><option value="1919">1919</option><option value="1918">1918</option><option value="1917">1917</option><option value="1916">1916</option><option value="1915">1915</option><option value="1914">1914</option><option value="1913">1913</option>                                                                            </select>

                        <label id="day-label" class="day int">Day   </label><select id="dayselect" class="int" name="day" >


                                <option value="0" >  DD</option>
                                <option value="1">1</option><option value="2">2</option><option value="3">3</option><option value="4">4</option><option value="5">5</option><option value="6">6</option><option value="7">7</option><option value="8">8</option><option value="9">9</option><option value="10">10</option><option value="11">11</option><option value="12">12</option><option value="13">13</option><option value="14">14</option><option value="15">15</option><option value="16">16</option><option value="17">17</option><option value="18">18</option><option value="19">19</option><option value="20">20</option><option value="21">21</option><option value="22">22</option><option value="23">23</option><option value="24">24</option><option value="25">25</option><option value="26">26</option><option value="27">27</option><option value="28">28</option>                                          </select>




<div id="bday-h" class="helptext int" style="display:inline">Select appropriate values</div>                                                                        </td>
4

2 に答える 2

1

動作するスクリプトは次のとおりです。

問題:

月/年の値は、onchange()中に再計算されません。月の日数を計算するためのチェックを発行します。


var monthselected,yearselected,mtype=0,visited=0;

function reassembleDate(){

    monthselected = parseInt(document.getElementById('month').value);
    yearselected = parseInt(document.getElementById('year').value); 

    if(monthselected == "" || yearselected == "0") {
        return;
    }

    if(monthselected==4||monthselected==6||monthselected==9||monthselected==11)
        {mtype=30;}
    else if(monthselected==2&&isleapyear(yearselected))
        {mtype=29;}
    else if(monthselected==2&&!isleapyear(yearselected))
        {mtype=28;}
    else
        {mtype=31;} 

    removeOptions();
    addOptions(mtype);
}

function removeOptions(){
    var x=document.getElementById('dayselect');
    while(x.length>28)
    { 
        x.remove(x.length-1);
    }
}

function addOptions(mtype) {
    //alert('initialising');
    var i;
    for(i=29;i<=mtype;i++)
    {
        var x=document.getElementById("dayselect");
        var option=document.createElement("option");

        option.text=i;
        try
          {//alert('trying');
          // for IE earlier than version 8
          x.add(option,x.options[null]);
          }
        catch (e)
          {//alert('catching');
          x.add(option,null);
          }
    }
}             

function isleapyear(year){
    if((year%4)==0)
    {
        if((year%100)!=0)
        {
            return true;
        }
        else return false;
    }

    if((year%400)==0)
    {
        return true;
    }

    else return false;
}   
于 2012-12-29T18:56:46.347 に答える
1

提供された答えは、1つの例外を除いて良いです。2000年は、うるう年ではないとして返されます。これは、年が400で割り切れるかどうかを確認する前にtrue / falseを返すためです。これは、修正されたバージョンです。また、29を複製することもあったので、すべての数字を削除してもらいました。代わりに、すべての数字を取り除き、「-」の最初のプレースホルダーを追加してから、月に基づいてボックスに完全に入力します。お役に立てれば。:-)

<script type="text/javascript">
var monthselected,yearselected,mtype=0,visited=0;

function reassembleDate(){

    monthselected = parseInt(document.getElementById('month').value);
    yearselected = parseInt(document.getElementById('year').value); 

    if(monthselected == "" || yearselected == "0") {
        return;
    }

    if(monthselected==4||monthselected==6||monthselected==9||monthselected==11)
        {mtype=30;}
    else if(monthselected==2&&isleapyear(yearselected))
        {mtype=29;}
    else if(monthselected==2&&!isleapyear(yearselected))
        {mtype=28;}
    else
        {mtype=31;} 

    removeOptions();
    addOptions(mtype);
}

function removeOptions(){
    var x=document.getElementById('dayselect');
    while(x.length>0)
    { 
        x.remove(x.length-1);
    }
}

function addOptions(mtype) {
    //alert('initialising');
    var x=document.getElementById("dayselect");
    var option=document.createElement("option");
    option.text='--';
    try
      {//alert('trying');
      // for IE earlier than version 8
      x.add(option,x.options[null]);
      }
    catch (e)
      {//alert('catching');
      x.add(option,null);
      }
    var i;
    for(i=1;i<=mtype;i++)
    {
        var x=document.getElementById("dayselect");
        var option=document.createElement("option");

        option.text=i;
        try
          {//alert('trying');
          // for IE earlier than version 8
          x.add(option,x.options[null]);
          }
        catch (e)
          {//alert('catching');
          x.add(option,null);
          }
    }
}             

function isleapyear(year){
    if((year%400)==0)
    {
        return true;
    }

    if((year%4)==0)
    {
        if((year%100)!=0)
        {
            return true;
        }
        else return false;
    }

    else return false;
}   
</script>
于 2013-10-28T21:10:16.370 に答える