Параметр «День» не обновляется при изменении месяца

0

Здесь мой месяц выбирает вариант HTML:

<select id="cmbMonth" style="margin-right:20px;">
        <option value="--" selected="selected">--</option>
        <option value="1">January</option>
        <option value="2">February</option>
        <option value="3">March</option>
        <option value="4">April</option>
        <option value="5">May</option>
        <option value="6">June</option>
        <option value="7">July</option>
        <option value="8">August</option>
        <option value="9">September</option>
        <option value="10">October</option>
        <option value="11">November</option>
        <option value="12">December</option>
</select>

Вариант выбора дня HTML:

<select id="cmbDay" style="margin-right:20px;">
        <option value="--" selected="selected">--</option>
</select>

Вот мой jQuery для управления YEAR, MONTH и DATE:

    //Get Year, Month, and Day
    function daysInMonth(month,year) {
        var dd = new Date(year, month, 0);
        return dd.getDate();
    }

    function setDayDrop(dyear, dmonth, dday) {
        var year = dyear.options[dyear.selectedIndex].value;
        var month = dmonth.options[dmonth.selectedIndex].value;
        var day = dday.options[dday.selectedIndex].value;

        if (day == '--') {
            var days = (year == '--' || month == '--')
                ? 31 : daysInMonth(month,year);
            dday.options.length = 0;
            dday.options[dday.options.length] = new Option('--','--');
            for (var i = 1; i <= days; i++)
                dday.options[dday.options.length] = new Option(i,i);
        }
    }

    function setDay() {
        var year = document.getElementById('cmbYear');
        var month = document.getElementById('cmbMonth');
        var day = document.getElementById('cmbDay');
        setDayDrop(year,month,day);
    }

$('#cmbMonth').change(function() {
    setDay();
});

Этот код отлично работает для обновления cmbDay, когда месяц изменяется в стадии предварительной загрузки.

Проблема заключается в том, что пользователь выбирает день и меняет месяц, параметр дня не обновляется и сохраняется в предыдущий месяц.

  • 0
    Вы смешиваете нативный JS и jQuery - есть причина почему?
  • 0
    @mplungjan Но когда вы нажимаете на дату и снова меняете месяц, дата не обновляется.
Теги:

2 ответа

4
Лучший ответ

Я думаю, это потому, что вы изменили значения только тогда, когда ваш день "-". но когда он уже присутствует, это условие терпит неудачу и выполнить нечего.

 if (day == '--') // for first time
{
    // code to generate days for the selected month
}
else // when day is already present
{
   // code to generate days for the selected month
}
1

Работает для меня, если я удаляю if, перезагружаю день и добавляю изменения к году и месяцу

Live Demo

function setDayDrop(dyear, dmonth, dday) {
    var year = dyear.options[dyear.selectedIndex].value;
    var month = dmonth.options[dmonth.selectedIndex].value;
    var days = (year == '--' || month == '--') ? 31 : daysInMonth(month, year);
    dday.options.length = 1; // no need to set this to 0 each time
    for (var i = 1; i <= days; i++) {
      dday.options[dday.options.length] = new Option(i, i);
    }
}

function setDay() {
    var year = document.getElementById('cmbYear');
    var month = document.getElementById('cmbMonth');
    var day = document.getElementById('cmbDay');
    // optional
    // day.selectedIndex=0; 
    setDayDrop(year, month, day);
}
$(function () {
    $('#cmbMonth, #cmbYear').change(function () {
        setDay();
    });
});
  • 0
    Да .. Спасибо за ваше решение тоже.
  • 0
    Вы можете скрыть месяц и день, когда год не выбран, и день, если месяц не выбран
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню