选择标记事件触发次数不超过2次 [英] select tag events not firing more than 2 times

查看:67
本文介绍了选择标记事件触发次数不超过2次的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在一年中的一天(一天,一天,一天,一天,第二个月){1,2,3 ...} 我希望仅在下拉菜单中显示有效日期. 即,如果选择jan,则上限为31;如果选择feb的上限为28或29,则取决于年份(ap年与否)

i have made three drop downs month year day{1,2,3...} i want only valid day gets displayed in the drop down. i.e if jan is selected 31 is the upper limit if feb is selected 28 or 29 depending upon the year (leap or not)

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>

当最多进行两次更改,但之后的日期列表{1,2,3 ...}不变时,代码可以正常工作.为什么会这样? 我已经尝试过在所有事件(例如onChange和onBlur)上更改日期,但这无济于事.

the code works fine when there are upto two changes but after that the list of date{1,2,3...} does not change.Why is this happening? I have tried changing dates on all events like onChange and onBlur it does not help.

生成的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>

推荐答案

工作脚本如下:

问题:

在onchange()期间不会重新计算月份/年份的值. 发出用于计算当月天数的支票.

The value of the month / year is not recalculated during onchange(). Issue with the check for calculating days in the month.

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;
}   

这篇关于选择标记事件触发次数不超过2次的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆