kelvinluck Jquery DatePicker Multiple Select

时间:2011-03-04 04:49:26

标签: jquery datepicker


我有inline calender配置为允许多个日期选择。我想根据文本框的值动态设置可选字段的数量。这是我的js代码

var handle;
    $(function () {
        Date.format = 'yyyy-mm-dd';
        setDatePicker();
    });

    $("#numField").live('click', function () {
        setDatePicker();
    });
    function setDatePicker() {
        //$("#multimonth").destroy();
        handle =  $('#multimonth')
        .datePicker(
            {
                createButton: false,
                inline: true,
                closeOnSelect: false,
                selectMultiple: true,
                numSelectable: $("#numField").val()==""?3:$("#numField").val()
            }
        )
        .bind(
            'click',
            function () {
                $(this).dpDisplay();
                this.blur();
                return false;
            }
        )
        .bind(
            'dateSelected',
            function (e, selectedDate, $td, state, selectedDates) {
                var dotes = $('#multimonth').dpGetSelected();
                for (i = 0; i < dotes.length; i++) {
                    dotes[i] = dotes[i].asString();
                }
                var dates = dotes.join(",");
                alert(dates);
                $("#hiddenDate").val(dates);
            }
        )

    }

我有一个id =“numField”的输入字段,想要在输入字段的change事件中更改datepicker的numSelectable参数。我在其API中找不到任何方法。提前谢谢

1 个答案:

答案 0 :(得分:3)

API中没有任何内容可以更改numSelectable,但您可以自己添加这样的内容,而无需花费太多精力。

如果查看源代码,您会在对象文字中看到一堆dp*个函数:

dpSetDisabled : function(s)
{
    //...
},
dpSetStartDate : function(d)
{
    //...
},
// ...

所以只需将此列表添加到列表中:

dpSetNumSelectable: function(n) {
    return _w.call(this, 'setNumSelectable', n);
}

然后,进一步向下,您将看到在另一个对象文字中定义setStartDatesetEndDate等的位置,因此只需将setNumSelectable定义添加到该列表中:

setNumSelectable: function(n) {
    if(n <= 0) {
        // Sanity checking is left as an exercise for the reader.
    }
    if(this.numSelected > n) {
        // What to do in this case is also left as an exercise for
        // the reader. All the pieces you need to do something sensible
        // here are available and nearby in the source.
    }
    this.numSelectable = n;
}

然后,您应该可以根据需要更改numSelectable选项:

$('#multimonth').dpSetNumSelectable(some_integer);

不要害怕学习和修改你使用的工具的源代码,毕竟这是开源软件的重点。您甚至可以向作者发送一个补丁,该补丁添加了您所需的功能,从而帮助其他人帮助您(这是开源软件的另一个点)。