JQuery datepicker:限制日期不起作用

时间:2015-01-06 11:44:08

标签: jquery datepicker

您好我制作了一个日历供您帮助。

然而,要与之比较的if语句不正确。

规则是

我们假设选择了From和To。

然后,如果起始日期大于到日期,则必须在比起日期晚3个月的日期设置日期。但如果没有,则不需要更改日期。

我不知道为什么if语句不起作用。

是否有调试工具?喜欢PHP中的debug()吗?

请告诉我。

谢谢

$(function () {
    $("#from").datepicker({
        maxDate: 0,
        showButtonPanel : true,
        closeText : 'Reset',
        onClose: function () {
            var today = new Date();
            var from = $('#from').datepicker('getDate');
            var from3 = from;
            from3.setMonth(from3.getMonth() + 3);//3 month limit
            var to = $('#to').datepicker('getDate');
            var tdate = $("#from").datepicker("getDate");

            if(to == ""){
                $("#from").datepicker("option", "maxDate", today);
            }
            else{
                if ($(window.event.srcElement).hasClass('ui-datepicker-close')) {
                    $.datepicker._clearDate(this);
                    $("#from").datepicker("option", "maxDate", today);
                }
                $("#from").datepicker("option", "maxDate", today);
                tdate.setMonth(tdate.getMonth() + 3);
                tdate = (tdate>today) ? today : tdate;
                $("#to").datepicker("option", "maxDate", tdate);

                if(from3 > to){
                    $('#to').datepicker('setDate', from3);
                }
                else if(from > to){
                    $('#to').datepicker('setDate', from);
                }
            }
        }
    });
    $("#to").datepicker({
        maxDate: 0,
        showButtonPanel : true,
        closeText : 'Reset',
        onClose: function () {
            var today = new Date();
            var from = $('#from').datepicker('getDate');
            var from3 = from;
            from3.setMonth(from3.getMonth() + 3);//3 month limit
            var to = $('#to').datepicker('getDate');

            if(from == ""){
                $('#from').datepicker('option', 'maxDate', today);
            }
            else{
                if ($(window.event.srcElement).hasClass('ui-datepicker-close')) {
                    $.datepicker._clearDate(this);
                    $("#to").datepicker("option", "maxDate", today);
                }
                $("#to").datepicker("option", "maxDate", today);
                if(from3 > to){
                    $('#from').datepicker('setDate', from3);
                }
                else if(from > to){
                    $('#to').datepicker('setDate', from3);
                }
            }
        }
    });
});

1 个答案:

答案 0 :(得分:1)

使用评论中提供的小提琴,这是我的版本:

$(function () {
    $("#from").datepicker({
        maxDate: 0,
        showButtonPanel: true,
        closeText: 'Reset',
        onClose: function (e) {
            var from = $('#from').datepicker('getDate');
            var to = $('#to').datepicker('getDate');

            if(from != null) {
                // Limit the value of "TO" date to current "FROM" date
                $("#to").datepicker("option", "minDate", from);

                // Set "TO" date to "FROM" + 3 months if it is currently less than FROM
                if(to != null && to < from) {
                    $('#to').datepicker('setDate', new Date(from.getFullYear(), from.getMonth() + 3, from.getDate()));
                }
            }
        }
    });
    $("#to").datepicker({
        maxDate: 0,
        showButtonPanel: true,
        closeText: 'Reset',
        onClose: function (e) {
            var from = $('#from').datepicker('getDate');
            var to = $('#to').datepicker('getDate');

            if(to != null) {
                // Limit the value of "FROM" date to current "TO" date
                $("#from").datepicker("option", "maxDate", to);

                // Set "FROM" date to "TO" - 3 months if it is currently more than TO
                if(from != null && from > to) {
                    $('#from').datepicker('setDate', new Date(to.getFullYear(), to.getMonth() - 3, to.getDate()));
                }
            }
        }
    });
});

在这里,您可以找到一个有效的演示:http://jsfiddle.net/ddg664rn/13/

在此版本中,如果不满足条件,则日期将在+ / - 3个月更改(即,如果您将FORM日期设置为大于TO日期,或TO日期小于FORM日期)。 我添加了minDate / maxDate,它也限制了错误输入:选择FROM日期后,TO日期不能小于此值。