【问题标题】:jQuery UI Datepicker beforeShowDay - Enable the day after the one that is testedjQuery UI Datepicker beforeShowDay - 启用测试后的第二天
【发布时间】:2012-04-27 23:42:02
【问题描述】:

我正在与 beforeShowDay 活动作斗争:

我正在设置的日期选择器会建议一些学习计划的开始日期,它需要以这种方式运行:

  • 对于某些课程,开始日期是预定义的日期,我让这部分工作正常。
  • 对于其他一些程序,我只需要在星期一可用(这已完成),但如果星期一是假期,我会禁用它。 (这对我来说也很好用)。 我唯一想念的是,我不仅要禁用这个星期一,还要启用下一个星期二(最初应该禁用,因为我只想选择星期一)。

这是我到目前为止所做的(可能没有优化,但是一旦一切都启动并运行,我会看看我能做什么):

function availableDays(date) {
    var holidays = $("#holidays").text(); // "1-1-2012,2-20-2012,4-6-2012,4-9-2012,5-21-2012,7-2-2012,8-6-2012,9-3-2012-10-8-2012,11-11-2012,12-25-2012,12-26-2012"
    var holidaysDates = new Array();
    holidaysDates = holidays.split(",");

    var m = date.getMonth(), d = date.getDate(), y = date.getFullYear();

    var selectedCourseStartingDates = $("#courseName option:selected").attr("startingdates");
    if(selectedCourseStartingDates != "") {
        var courseStartingDates = new Array();
        courseStartingDates = selectedCourseStartingDates.split(",");

        for(i = 0; i < courseStartingDates.length; i++) {
            if($.inArray((m+1) + '-' + d + '-' + y,courseStartingDates) != -1 || new Date() > date) {
                if($.inArray((m+1) + '-' + d + '-' + y,holidaysDates) != -1) {
                    return [false];
                }
                else {
                    return [true];
                }
            }
            else {
                return [false];
            }
        }
    }
    else {
        // If not Monday
        if(date.getDay() != 1) {
            return [false];
        }
        else {
            if($.inArray((m+1) + '-' + d + '-' + y,holidaysDates) != -1) {
                return [false];
            }
            else {
                return [true];
            }
        }
    }
}

function noWeekendsOrHolidays(date) {
    var noWeekend = $.datepicker.noWeekends(date);
    return noWeekend[0] ? availableDays(date) : noWeekend;
}

我在 beforeShowDay 事件中调用“noWeekendsOrHolidays”。 我以这种格式“m-d-yyyy”从 2 个字符串(特定启用日期和假期到禁用)中获取我的日期。

我需要你的帮助来找出这个循环中的哪个位置(以及如果它实际上是如何可能的)我可以告诉 datepicker 实例在当前正在测试的一次之后的日期返回 true 或 false 吗?

当我星期一放假时,是否有可能在下一次迭代(日历上的第二天)放置一个标志,测试可以考虑这个标志,以便在星期二返回 true 而不是预期的 false首先要表现得好吗?

好吧,我希望我已经足够清楚了?英语不是我的母语,所以如果我使用的某些术语不正确,请告诉我。

非常感谢您在这方面的帮助!

塞德里克

【问题讨论】:

    标签: jquery jquery-ui datepicker jquery-ui-datepicker


    【解决方案1】:

    在这里发布我的问题实际上让我能够退后一步找到解决方案。

    这是我更新的代码:

    function availableDays(date) {
        var holidays = $("#holidays").text(); // "1-1-2012,2-20-2012,4-6-2012,4-9-2012,5-21-2012,7-2-2012,8-6-2012,9-3-2012-10-8-2012,11-11-2012,12-25-2012,12-26-2012"
        var holidaysDates = new Array();
        holidaysDates = holidays.split(",");
    
        var m = date.getMonth(), d = date.getDate(), y = date.getFullYear();
    
        var selectedCourseStartingDates = $("#courseName option:selected").attr("startingdates");
        if(selectedCourseStartingDates != "") {
            var courseStartingDates = new Array();
            courseStartingDates = selectedCourseStartingDates.split(",");
    
            for(i = 0; i < courseStartingDates.length; i++) {
                if($.inArray((m+1) + '-' + d + '-' + y,courseStartingDates) != -1 || new Date() > date) {
                    if($.inArray((m+1) + '-' + d + '-' + y,holidaysDates) != -1) {
                        return [false];
                    }
                    else {
                        return [true];
                    }
                }
                else {
                    return [false];
                }
            }
        }
        else {
            // If not Monday
            if(date.getDay() != 1) {
                /* UPDATED */
                if($.inArray((m+1) + '-' + (d-1) + '-' + y,holidaysDates) != -1) {
                    return [true];
                }
                else {
                    return [false];
                }
                /**********/
            }
            else {
                if($.inArray((m+1) + '-' + d + '-' + y,holidaysDates) != -1) {
                    return [false];
                }
                else {
                    return [true];
                }
            }
        }
    }
    
    function noWeekendsOrHolidays(date) {
        var noWeekend = $.datepicker.noWeekends(date);
        return noWeekend[0] ? availableDays(date) : noWeekend;
    }
    

    我只是在前一天 (d-1) 遇到不是星期一的假期时进行测试。

    祝你有美好的一天!

    塞德里克

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-10
      • 2017-12-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多