如何在选择月份后停止追加日期

时间:2015-07-29 10:55:14

标签: javascript jquery

简化问题。我有3个下拉选择日期。日期选择器显示一个月内的天数范围(如果它只有29天或31天)。它的工作正常,但是当我在不同的月份改变时,我的日子里的价值正在重复。

例如我选择二月。显示的日期是28天。      然后我改为三月。这些日子显示为31天。问题是它们只是结合在一起所以我今天下拉的价值变得很多。如何解决这个问题,有什么帮助吗?



function daysInMonth(month, year) {
    return new Date(year, month, 0).getDate();
}
function onMonthChange(){
    var year = document.getElementById("yeardialog").value;
    var month = document.getElementById("monthdialog").value;
 
    var endOfTheMonth = daysInMonth(month, year);
    console.log(endOfTheMonth);
  
    var select = document.getElementById('datedialog');
    for (var i = 0; i < endOfTheMonth; i++) {
        select.options[select.options.length] = new Option(i + 1, i);
    } 
}
&#13;
<select id="yeardialog" name="yeardialog">
    <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 value="">--</option>
    <option value="1">1</option>
    <option value="2">2</option>
    <option value="3">3</option>
</select>

<select id="datedialog">
    <option></option>
</select>
&#13;
&#13;
&#13;

3 个答案:

答案 0 :(得分:3)

class MyFragment extends Fragment {
    private MyActivity mActivity;

    public void onAttach (Activity activity){
        super.onAttach(activity);
        mActivity = (MyActivity) activity;
    }
}

解决方案简单明了。在填充之前删除选择的内容。

解决方案内的解决方案:

&#13;
&#13;
var select = document.getElementById('datedialog');
select.innerHTML = ""; // clear the select.
for (var i = 0; i < endOfTheMonth; i++) {
    select.options[select.options.length] = new Option(i + 1, i);
} 
&#13;
function daysInMonth(month, year) {
    return new Date(year, month, 0).getDate();
}
function onMonthChange(){
    var year = document.getElementById("yeardialog").value;
    var month = document.getElementById("monthdialog").value;
 
    var endOfTheMonth = daysInMonth(month, year);
    console.log(endOfTheMonth);

    var select = document.getElementById('datedialog');
    var selectedvalue = select.querySelector('option:checked');
    if (selectedvalue)
    {
      var store = selectedvalue.getAttribute("value");
    }
    select.innerHTML = "";
    for (var i = 0; i < endOfTheMonth; i++) {
        select.options[select.options.length] = new Option(i + 1, i);
    } 
    var retrieved = select.querySelector("option[value='"+store+"']");
    if (retrieved)
    {
      retrieved.setAttribute("selected", "true");
    }
}
&#13;
&#13;
&#13;

更新了问题。在删除之前存储原始值:

我们使用以下方法查找所选值:

<select id="yeardialog" name="yeardialog"> <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 value="">--</option> <option value="1">1</option> <option value="2">2</option> <option value="3">3</option> </select> <select id="datedialog"> <option></option> </select>

然后我们查看是否可以在新列表中找到该值。如果是,请选择该值。如果没有恢复为select.querySelector('option:checked');。当您选择1并且加载的月份只有30天时会发生这种情况。

答案 1 :(得分:1)

我不会修改innerHTML,我更喜欢删除节点

var select = document.getElementById('datedialog');

while(select.hasChildNodes())select.removeChild(select.firstChild);// clear the select.
for (var i = 0; i < endOfTheMonth; i++) {
    select.options.add(new Option(i + 1, i));
} 

答案 2 :(得分:0)

试试这个:

function onMonthChange(){
	var year = document.getElementById("yeardialog").value;
	var month = document.getElementById("monthdialog").value;

	var endOfTheMonth = daysInMonth(month, year);
	console.log(endOfTheMonth);

	var select = document.getElementById('datedialog');
	select.innerHTML = '';
	select.options[0] = new Option("Pick a date", 0);
	for (var i = 1; i < endOfTheMonth; i++) {
		select.options[select.options.length] = new Option(i + 1, i);
	}
}