Javascript:以月和日期为单位的日期在每次用户更改年份时重置



我几乎想放弃我的日期选择器代码哈哈。是否有任何例子,有3个下拉菜单,是正常工作和完美的日期选择器。我买了2天的股票,我认为我的日期选择器代码不像我预期的那样工作。现在一切都很好,除了它重置了我在更改年份时已经选择的月份和日期的值。

例如

:我选择year --> 1990 month -->02 date -->22

那么当我切换到另一个年份时,月份和日期的值被重置并变成1,这应该是不应该的:

year --> 1991 month -->1 date -->1

我想要的是,即使我在另一年或一个月改变下拉菜单也不会重置或变成1。我应该重新编码吗?任何帮助都将非常感激。

function daysInMonth(m, y){
               return m===2?y&3||!(y%25)&&y&15?28:29:30+(m+(m>>3)&1);
            }
            var monthArray = []; 
            var dateArray = []; 
            function onYearChange() {
                monthArray =[];
                var year = document.getElementById("yeardialog").value
                    if (document.getElementById("yeardialog").value != "0"){
                        for(var i = 1 ; i<=12; i++){
                        monthArray.push(i + '');
                        dateArray.push(daysInMonth(i, year));
                    }
                var select = document.getElementById("monthdialog");
                    select.innerHTML = "";
                        for(var i = 0; i < monthArray.length; i++) {
                            var monthOptions = monthArray[i].replace('', '');
                            var el = document.createElement("option");
                                el.textContent = monthOptions + '';
                            if(monthOptions<10){
                                monthOptions = '0'+monthOptions
                            }
                                el.value = monthOptions;
                                select.appendChild(el);
                        }
                      onMonthChange();
            		console.log(monthArray);
    			}   
    		}
            function onMonthChange(){	
                if(dateArray.length>12){
                    dateArray.splice(0, 12);
                }
                var dates =[]; 
                var month = document.getElementById("monthdialog").value;
                var endDay = dateArray[month.replace('', '')-1];
                for(var date = 1; date<=endDay; date++){
                    dates.push(date + '');
                }
                var select = document.getElementById("datedialog");
                select.innerHTML = "";
                for(var i = 0; i < dates.length; i++) {
                    var dateOptions = dates[i].replace('', '');
                    var el = document.createElement("option");
                        el.textContent = dateOptions + '';
                    if(dateOptions<10){
                        dateOptions = '0'+dateOptions
                    }
                    el.value = dateOptions;
                    select.appendChild(el);
                }
            }
<select id="yeardialog" name="yeardialog" onchange="onYearChange()">
  <option value="">--</option>
  <option value="1990">1990</option>
  <option value="1991">1991</option>
  <option value="1992">1992</option>
</select>
<select id="monthdialog" onchange="onMonthChange()">
  <option></option>
</select>
<select id="datedialog">
  <option></option>
</select>

问题是,当您更改日期列表时,您正在重新创建月份列表。您可以重写整个代码以避免这样做,或者您可以在重新创建列表之前存储当前选择的值,并在创建列表后再次选择它。

我想说,尽管所有年份都有相同的月数,所以动态生成它并不是很有用。你唯一感兴趣的是日期列表所以你可以这样写,改变年或月的选择只会改变可用的日期(保存之前选择的值,如果你喜欢,如果它有效,可以重新选择)

最新更新