【问题标题】:Disable specific dates jquery datepicker禁用特定日期 jquery datepicker
【发布时间】:2017-07-31 18:20:59
【问题描述】:

我试过了:

var disabledDays = ["2017-03-16","2017-03-20","2017-03-29","1717-0404-0303"];

jQuery(document).ready(function() {
  var unavailableDates = ["2017-03-16","2017-03-13","2017-03-21"];

  function unavailable(date) {
    // dmy = date.getDate() + "-" + (date.getMonth() + 1) + "-" + date.getFullYear();
    dmy = date.getFullYear() + "-" + (date.getMonth() + 1) + "-" + date.getDate();
    if ($.inArray(dmy, unavailableDates) < 0) {
      return [true,"","Book Now"];
    } else {
      return [false,"","Booked Out"];
    }
  }

  jQuery('#checkin').datepicker({
    minDate: 0,
    constrainInput: true,        
    dateFormat: "yy-mm-dd",
    beforeShowDay: unavailable
  }).on('change', function() { 
    jQuery(this).valid(); 
  });  
});

我只是不明白为什么它一直在说:

无法读取未定义的属性“inArray”

我尝试了 100 个这样的代码,但上帝一样的错误。所有这些代码在他们的演示中都可以正常工作。

有什么建议吗?

【问题讨论】:

  • $ 变量是否指向 jQuery?您在代码中的其他任何地方都使用jQuery,这意味着您在某处调用了$.noConflict()
  • 太棒了!!..我笨...你能告诉我如何得到像“03”而不是“3”的月份吗?
  • 当然,我为您添加了涵盖这两个问题的答案

标签: jquery wordpress datepicker jquery-ui-datepicker


【解决方案1】:

该错误意味着$ 变量没有指向jQuery。这也得到了您在代码中所有其他点使用jQuery 的支持。要解决此问题,您可以在整个代码中将 $.inArray() 更改为 jQuery.inArray(),或者更好的是,您可以为传递给 document.ready 处理程序的 jQuery 实例设置别名。

从那里您的日期格式存在问题,因为您的数组包含月份和日期值的前导零,但 dmy 变量没有。要解决此问题,您可以使用日期的 toISOString() 方法并从中删除时间。试试这个:

jQuery(function($) { // < note the $ alias here
    var unavailableDates = ["2017-03-16", "2017-03-13", "2017-03-21"];

    function unavailable(date) {
        var dmy = date.toISOString().split('T')[0];
        if ($.inArray(dmy, unavailableDates) < 0) {
            return [true, "", "Book Now"];
        } else {
            return [false, "", "Booked Out"];
        }
    }

    $('#checkin').datepicker({
        minDate: 0,
        constrainInput: true,
        dateFormat: "yy-mm-dd",
        beforeShowDay: unavailable
    }).on('change', function() {
        $(this).valid();
    });
});

Working example

【讨论】:

  • 但它正在禁用下一个日期.. 喜欢而不是 16.. 它禁用 17
  • 这很可能是由时区偏移引起的。您可以通过将"00" 添加到字符串的开头并调用.slice(-2) 来强制值前导零,如下所示:jsfiddle.net/sLns93zp/1
猜你喜欢
  • 1970-01-01
  • 2012-04-02
  • 2010-10-15
  • 2015-07-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多