2

我有以下带有三个参数的函数。

initializeDateDropdown("year", "month", "day");

    function initializeDateDropdown(year1,month1,day1) {
        var currentYear = new Date().getFullYear();
        $("#"+year1).append(function () {
            var yearList = '';
            for (var i = 1951; i <= currentYear; i++) {
                yearList += '<option value="' + i + '">' + i + '</option>';
            }
            return yearList;
        }).val(currentYear)
      .add($('#'+month1).val(new Date().getMonth()))
      .bind('change', showDays);

        showDays(year1, month1, day1);

        $('#'+day1).val(new Date().getDate());


    }

showDays()方法的定义中,当我尝试显示 year1 时,我不断得到[object] [object]和 month1 和 day1 为undefined.

谁能告诉我这段代码有什么问题?

下面是 showDays 方法定义。

function showDays(year, month, day) {
        alert(year);
        var days = new Date($("#" + year).val(), parseInt($('#' + month).val(), 10) + 1, 0).getDate();

        var prevSelectedDate = $('#' + day).val();
        $('#' + day).empty();
        for (var i = 1; i <= parseInt(days, 10) ; i++) {
            $('#' + day).append($('<option />', { text: i, value: i }));
        }

        $('#' + day).val(prevSelectedDate);
    }

请帮我解决一下这个。

4

1 回答 1

4

当你这样做时.bind('change', showDays),这是等价的:

.bind('change', showDays(event));

事件对象event在哪里。

您需要将函数的该部分更改为:

.bind('change', function(){
    showDays(year1, month1, day1);
});

由于您需要将参数传递给函数(year1, month1, day1),因此您需要将其包装在匿名回调函数中。

另一方面,.bind不推荐使用。使用.on()

.on('change', function(){
    showDays(year1, month1, day1);
});
于 2013-08-23T14:02:24.653 回答