【问题标题】:jQuery UI Datepicker minDate changes adjust the calendar; how can I freeze it?jQuery UI Datepicker minDate 更改调整日历;我怎样才能冻结它?
【发布时间】:2011-03-07 00:13:48
【问题描述】:

我有一个为期五个月的 Datepicker 内联日历。 startDate 是我编写的一个变量,由用户点击事件设置。我通过这样做来调整 init 后的 minDate 和 maxDate 选项:

$('#datepicker').datepicker("option",{"minDate":startDate,"maxDate":endDate}).datepicker("refresh");

但是,当日历刷新时,它会根据 startDate 变量显示第一个月,这会让人迷惑。例如,我在一月份有日历初始化,它显示到五月。当 startDate 恰好在下个月时,比如二月,然后当我刷新日历时,它会从该月(二月)开始显示,并禁用所有日期直到所选日期。我想冻结日历,使其始终显示 1 月到 5 月,但将截至 minDate 的所有日期涂黑。

是否有一种简单的方法可以冻结日历,使其显示特定的 5 个月范围,而不管 minDate 和 maxDate 设置如何?

提前致谢。

【问题讨论】:

    标签: jquery user-interface datepicker maxdate mindate


    【解决方案1】:

    我试图破解 minDate 和 maxDate 功能,以便在所选日期之前涂黑日期。我没有这样做,而是构建了一个日期对象数组,我将这些对象提供给 beforeShowDay,如下所示:

       $('#datepicker').datepicker({
                ...
                beforeShowDay: setRestrictedDates,
                ...
       })
     function setRestrictedDates(date) {
      var arrLen = jsForbiddenDatesArray.length;
      for (var x=0; x<arrLen; x++) {
       var arraydate = jsForbiddenDatesArray[x];
       var arraytime = Math.round( new Date(arraydate).getTime() / 86400000 );
       var dtime = Math.round( date.getTime() / 86400000 );
       if ( dtime == arraytime || date.getDay() == 5) {
        return [false, ''];
        break;
       }
      }
      return $.datepicker.noWeekends(date);
     }
    

    请注意,通过除以 86400000 来设置 dtime 只是将日期转换为天,以便我可以比较以确保两天相同(dtime == arraytime)。此外,OR 语句“date.getDay() == 5”选择所有星期五。这与 datepicker.noWeekends(date) 相结合,意味着我有周末和周五,以及我的禁止日期数组中的任何日期。

    我希望这对某人有所帮助。为 datepicker 设置不适用日期非常方便,但我发现这样做的文档晦涩难懂,甚至根本不存在。

    感谢这里和 jQuery 论坛中帮助我解决这个问题的所有人。

    【讨论】:

      【解决方案2】:

      您可以尝试将刷新放在选项之前吗?

      【讨论】:

      • 谢谢,我刚试过,它仍然在 minDate 月份而不是一月份开始日历。
      【解决方案3】:
      $("#datepicker").datepicker({ showCurrentAtPos: new Date().getMonth(), numberOfMonths: 12, minDate: startDate, maxDate: endDate});
      

      【讨论】:

      • 谢谢,我知道你在做什么,但是当设置 minDate 时,显示的第一个月是 minDate 的月份,因为当前月份更改为二月。也许另一种表达问题的方式是如何冻结currentMonth?谢谢回复,还是卡住了。
      • stepMonths: 0 添加到选项中。除此之外,我认为它不支持您开箱即用的操作。
      • 谢谢,这也不起作用。我正在转换我的努力来制作一系列停电日期,然后更新数组,然后刷新。这是更多的工作,但不会破解 minDate/maxDate 设置,无论如何可能更强大。但是,如果有人确实知道如何执行此操作,请在此处发布。谢谢大家。
      【解决方案4】:

      约翰--

      我遇到了同样的问题,并在网上找到了一个非常酷的解决方案。它使日期范围的可视化变得非常容易,对于我的应用,预设的日期范围选择非常酷。

      http://www.filamentgroup.com/lab/date_range_picker_using_jquery_ui_16_and_jquery_ui_css_framework/

      “范围”功能在底部附近进行了详细说明。如果您对此进行测试,请确保不要忘记链接相关的 CSS 文件,因为它会影响脚本的成败。

      祝你好运。

      【讨论】:

      • bpeterson - 谢谢,优雅的代码和非常很酷的解决方案。 jQuery 摇滚,尤其是当暴露的功能如此简单时。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-02-06
      • 2016-05-01
      • 2011-07-10
      • 1970-01-01
      • 1970-01-01
      • 2013-10-22
      相关资源
      最近更新 更多