【问题标题】:Need to enable a few days from already disabled weekends in datepicker需要在 datepicker 中启用已禁用周末的几天
【发布时间】:2018-11-08 13:39:46
【问题描述】:

我已禁用 jQuery 日期选择器中的所有周末。现在有一个要求,我必须启用几个周末日期。

我尝试将这些日期添加到数组中,然后启用它们,但它不起作用。当前代码在下面,可以很好地禁用周末,但我无法启用我需要的特定日期。任何帮助将不胜感激!

$(window).load(function() {
  var days = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"];
  var availableDates = ["2018/12/22", "2018/12/23"]; // yyyy/MM/dd
  var unavailableDates = ["2018/12/25", "2018/12/26", "2018/12/27"]; // yyyy/MM/dd
  var unavailableDays = ["Saturday", "Sunday", "Monday"];

  function unavailable(date) {
    ymd = date.getFullYear() + "/" + ("0" + (date.getMonth() + 1)).slice(-2) + "/" + ("0" + date.getDate()).slice(-2);
    day = new Date(ymd).getDay();
    if ($.inArray(ymd, unavailableDates) < 0 && $.inArray(days[day], unavailableDays) < 0 && $.inArray(ymd, availableDates) < 1) {
      return [true, "enabled", "Order now"];
    } else {
      return [false, "disabled", "Delivery not available on this date"];
    }
  }

  $('#date').datepicker({
    beforeShowDay: unavailable
  });
});

【问题讨论】:

    标签: jquery jquery-ui-datepicker


    【解决方案1】:

    我想availableDates 必须覆盖关于周末和unavailableDates 的其他条件...

    所以如果是单独的条件。如果计算结果为 true,则只需 return(因此不会计算第二个条件)。

    $(window).load(function() {
      var days = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"];
      var availableDates = ["2018/12/22", "2018/12/23"]; // yyyy/MM/dd
      var unavailableDates = ["2018/12/25", "2018/12/26", "2018/12/27"]; // yyyy/MM/dd
      var unavailableDays = ["Saturday", "Sunday", "Monday"];
    
      function unavailable(date) {
        ymd = date.getFullYear() + "/" + ("0" + (date.getMonth() + 1)).slice(-2) + "/" + ("0" + date.getDate()).slice(-2);
        day = new Date(ymd).getDay();
    
        if($.inArray(ymd, availableDates) >= 0){   // Evaluate availableDates first
          return [true, "enabled", "Order now"];
        }
    
        if ($.inArray(ymd, unavailableDates) < 0 && $.inArray(days[day], unavailableDays) < 0) {
          return [true, "enabled", "Order now"];
        } else {
          return [false, "disabled", "Delivery not available on this date"];
        }
      }
    
      $('#date').datepicker({
        beforeShowDay: unavailable
      });
    });
    

    【讨论】:

    • 太棒了! ;) 然后只是accept 两个答案之一。
    【解决方案2】:

    您需要稍微调整您的条件以适用于可用和不可用的日期。将可用日期子句放在OR 条件中

    function unavailable(date) {
    
        ymd  = date.getFullYear() + "/" + ("0" + (date.getMonth() + 1)).slice(-2) + "/" + ("0" + date.getDate()).slice(-2); 
        day = new Date(ymd).getDay();
    
        if (($.inArray(ymd, unavailableDates) < 0 && $.inArray(days[day], unavailableDays) < 0)
             || $.inArray(ymd, availableDates) >= 0) {
          return [true, "enabled", "Order now"];
        } else {
          return [false, "disabled", "Delivery not available on this date"];
        }
    } 
    

    Working Fiddle

    【讨论】:

    • 如果有帮助,请支持两个答案并接受您实施的答案。它将帮助其他寻找类似解决方案的人。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多