禁用特定日期jquery datepicker

时间:2017-03-10 11:53:48

标签: jquery wordpress datepicker jquery-ui-datepicker

我试过了:

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个代码,由于同样的错误。所有这些代码在他们的演示中都运行良好。

有什么建议吗?

1 个答案:

答案 0 :(得分:0)

该错误意味着$变量未指向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