【问题标题】:appendChild in javascript repeats the value of dropdownjavascript中的appendChild重复下拉列表的值
【发布时间】:2015-10-10 08:20:51
【问题描述】:

我正在开发我的日期下拉选择器。我有 3 个下拉菜单用于选择年、月和日。我为此使用了javascript。当我选择一年时运行的程序然后javascript将在我的月份下拉列表中附加月份[1'2,3,4,5,依此类推]。以及当我选择一个月(例如 2--> 二月)时,它只会在我的日期下拉列表中附加 28 天。它运作良好,但问题是每次我更改为新的一年时,我的月份下拉列表的值都会重复以及以天为单位。

示例:

     year dropdown --- I choose 1970
     month dropdown ----- [1,2,3,4,5,6,7,8,9,10,11,12]
     dates dropdown ----[1-31]

当我选择另一年时:

     year dropdown --- I choose 1972
     month dropdown ----- [1,2,3,4,5,6,7,8,9,10,11,12, 1,2,3,4,5,6,7,8,9,10,11,12]
     dates dropdown ----[1-31]

如您所见,我的月份下拉列表中的值仅重复。

我的代码如下:

 
        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() {
	        $(this).parent().remove();
	        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");
			      for(var i = 0; i < monthArray.length; i++) {
    		      var monthOptions = monthArray[i];
    		      var el = document.createElement("option");
    			      el.textContent = monthOptions;
    			      el.value = monthOptions;
    				  select.appendChild(el);
			     }
            }         
   }

function onMonthChange(){


			var dates =[]; 
			var month = document.getElementById("monthdialog").value;
			var endDay = dateArray[month-1];

			for(var date = 1; date<=endDay; date++){
				dates.push(date);
			}

		        var select = document.getElementById("datedialog");
					for(var i = 0; i < dates.length; i++) {
		    		var dateOptions = dates[i];
		    		var el = document.createElement("option");
		    			el.textContent = dateOptions;
		    			el.value = dateOptions;
		    				select.appendChild(el);
					}
		}
  <select id="yeardialog" name="yeardialog" onchange="onYearChange()">
	  <option value=""> -- </option>
	     {for $i = 1970; $i <= 2015; $i++ }
	      <option value={$i} >{$i}</option>
	     {/for}
	   </select>

	   <select id="monthdialog" onchange="onMonthChange()">
    		<option></option>
	</select>

		<select id="datedialog">
    		<option></option>
		</select>

       <div id="message">
										
		</div>

非常感谢任何帮助。谢谢你。

【问题讨论】:

  • 这段代码不适合我。你用的是什么模板系统?我不确定stackoverflow是否支持,也许你可以把它放在jsfiddle上?
  • 我认为您的问题可能可以通过仅添加一次月份或在添加它们之前清除选择来解决,这样您就不会重复添加它们。
  • 我为此使用了代码点火器。我认为原因是因为我在yeardialog中使用了php而不工作。
  • 如何在再次追加之前清除选择。 ?
  • 你可以像这样在添加子之前使用这样的一行 document.getElementById("monthdialog").innerHTML = "";

标签: javascript jquery


【解决方案1】:

每次用户更改年份时清除月份选择框:

var select = document.getElementById("monthdialog");
select.innerHTML = "";     // <= Clear options like this and then add optons
 for(var i = 0; i < monthArray.length; i++) {
  var monthOptions = monthArray[i];
  var el = document.createElement("option");
  el.textContent = monthOptions;
  el.value = monthOptions;
  select.appendChild(el);
}

片段:

function onYearChange() {
  var select = document.getElementById('monthdialog');
  select.innerHTML = "";
  for (var i = 0; i < 12; i++) {
    var el = document.createElement("option");
    el.textContent = i;
    el.value = i;
    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>

【讨论】:

  • 好的。我只会将这些代码实施到我的。非常感谢你。
猜你喜欢
  • 1970-01-01
  • 2021-12-13
  • 1970-01-01
  • 1970-01-01
  • 2018-07-01
  • 2021-03-10
  • 2016-09-25
  • 2019-05-29
  • 2019-05-02
相关资源
最近更新 更多