【问题标题】:jQuery datepicker UI - Disabling UK Bank Holidays with custom functionjQuery datepicker UI - 使用自定义功能禁用英国银行假期
【发布时间】:2018-02-22 10:40:39
【问题描述】:

我有一段在 Shopify 网站上使用的代码。基本上有 3 种交付选项,其中之一是周六交付,如果选择了该收音机,则除周六之外的所有日子都将被禁用。

<div class="delivery-radio">
 <h3>1. Choose your delivery type:</h3>
 <input type="radio" name="attributes[delivery-type]" value="Standard" checked> Standard - Delivery by 6pm (&pound;4.95)<br>
<input type="radio" name="attributes[delivery-type]" value="Pre 12" id="pre_12"> Express - Delivery by 12pm (&pound;6.25)<br>
<input type="radio" name="attributes[delivery-type]" value="saturday" id="saturday"> Saturday - Delivery by 6pm (&pound;6.95) 
</div>


<div style="width:300px; clear:both;">
  <h3>2. Pick a delivery date:</h3>
 <p>
  <input id="date" type="text" name="attributes[date]" value="{{ cart.attributes.date }}" required readonly="readonly" /> <span id="calendar_click" class="glyphicon glyphicon-calendar" aria-hidden="true"></span>
</p>
</div>

我需要的是一个不会破坏我当前禁用英国银行假期的代码的功能。我已经看到这可以通过添加日期并禁用它们来手动完成,但是我尝试过的一切都不起作用或破坏了我当前的代码。

这是我的代码的 sn-p,如果任何 jquery/javascript 大师可以提供帮助,将不胜感激,因为我在这方面不太先进。

jQuery(function() {

$('input[name="attributes[delivery-type]"]').on('click', function(){
$("#date").datepicker("destroy");
if($(this).val() == "saturday") {      
  $("#date").datepicker({
    dateFormat: 'dd-mm-yy',
    minDate: +1, 
  maxDate: '+2M',
    beforeShowDay: function(date){ return [date.getDay() == 6 || date.getDay() == 6,""]}
});
} else {
$("#date").datepicker(
{ 
  dateFormat: 'dd-mm-yy',
  minDate: +1, 
  maxDate: '+2M',
  beforeShowDay: function(date) {
    var day = date.getDay();
    return [(day != 0 && day != 1), ''];


  } 


});
 }
  });

   $("#date").datepicker(
   { 
    dateFormat: 'dd-mm-yy',
  minDate: +1, 
  maxDate: '+2M',
  beforeShowDay: function(date) {
    var day = date.getDay();
    return [(day != 0 && day != 1), ''];

  } 


});

});

【问题讨论】:

    标签: javascript jquery datepicker jquery-ui-datepicker


    【解决方案1】:

    datesDisabled 似乎是引导日期选择器的功能。

    您可以在beforeShowDay 函数中添加一个检查,我会将其与不同的部分分开,并根据需要使用变量。

    翻译周六的交货时间

    beforeShowDay: function(date){ return [date.getDay() == 6 || date.getDay() == 6,""]}
    

    beforeShowDay: saturdayOnly

    和你的默认

    beforeShowDay: function(date) {
        var day = date.getDay();
        return [(day != 0 && day != 1), ''];
    
      } 
    

    beforeShowDay: notSunMon

    然后添加这两个选项的处理:

    ```

    function saturdayOnly (date) {
        return dayStatus (date, array(0,1,2,3,4,5));
    }
    function notSunMon (date) {
        return dayStatus (date, array(0,1));
    }
    
    var disabledDates = ["22-03-2018", "29-03-2018", "03-04-2018"];
    
    function dayStatus (date, disableDays) {
      //Sat = 6, Sun = 0
      var dayNumber = date.getDay();
    
      if (disableDays.indexOf(dayNumber) !== -1) {
        return [false, ' disabledDay'];
      }
    
      var compareDate = formatDate(date);
    
      if (disabledDates.indexOf(compareDate) !== -1) {
        return [false, ' disabledDate'];
      }
    
      return [true, ' availableDay'];
    }
    
    function formatDate(date) {
      var dd = date.getDate().toString();
      var mm = (date.getMonth() + 1).toString(); // getMonth() is zero-based
      var yyyy = date.getFullYear().toString();
    
      //format as dd-mm-yyyy - make sure Disabled Dates match this format
      return (dd[1] ? dd : "0" + dd[0]) + "-" + (mm[1] ? mm : "0" + mm[0]) + "-" + yyyy;
    }
    

    ```

    这使用一个函数来格式化您的日期,以确保它们都是正确的,并添加 css 类。请参阅 jsfiddle 了解这些是如何实现的。

    请注意,days !=0 &amp;&amp; day != 1 检查“不是星期日/星期一”

    用 jsfiddle 试试看:https://jsfiddle.net/vreemt/sbrtyvoz/

    【讨论】:

      【解决方案2】:

      默认情况下,我通过保留 daysOfWeekDisabled: [0,6] 禁用周六和周日送货,对于周六送货选项,我将其保留为 - daysOfWeekDisabled: [0,1,2,3,4,5]。银行假日列表位于 datesDisabled 中。 mindate 和 maxDate 也是 startDate 和 endDate。

              <div class="delivery-radio">
              <h3>1. Choose your delivery type:</h3>
              <input type="radio" name="attributes[delivery-type]" value="Standard" checked> Standard - Delivery by 6pm (&pound;4.95)<br>
             <input type="radio" name="attributes[delivery-type]" value="Pre 12" id="pre_12"> Express - Delivery by 12pm (&pound;6.25)<br>
             <input type="radio" name="attributes[delivery-type]" value="saturday" id="saturday"> Saturday - Delivery by 6pm (&pound;6.95) 
             </div>
      
      
             <div style="width:300px; clear:both;">
               <h3>2. Pick a delivery date:</h3>
              <p>
               <input id="date" type="text" name="attributes[date]" value="{{ cart.attributes.date }}" required readonly="readonly" /> <span id="calendar_click" class="glyphicon glyphicon-calendar" aria-hidden="true"></span>
             </p>
             </div>
      
             <script>
      
              $(document).ready(function(){
                      var maxDate = getAdjustedDate(+60);
                      var minDate = getAdjustedDate(+1);
                      var tempDt = new Date();
                      console.log("today: "+tempDt.getDate());
                      console.log("minDate: "+minDate);
                      console.log("maxDate: "+maxDate);
      
                  $('input[name="attributes[delivery-type]"]').on('click', function(){
                  $("#date").datepicker("destroy");
                  if($(this).val() === "saturday") {      
                    $("#date").datepicker({
                      format: 'dd/mm/yyyy',
                      startDate: minDate, 
                      endDate: maxDate,
                      daysOfWeekDisabled: [0,1,2,3,4,5],
                      datesDisabled: ['30/03/2018','02/04/2018','07/05/2018','28/05/2018','27/08/2018','25/12/2018','26/12/2018']
                  });
                  } else {
                  $("#date").datepicker(
                  { 
                      format: 'dd/mm/yyyy',
                      startDate: minDate, 
                      endDate: maxDate,
                      daysOfWeekDisabled: [0,6],
                      datesDisabled: ['30/03/2018','02/04/2018','07/05/2018','28/05/2018','27/08/2018','25/12/2018','26/12/2018']
                  });
                   }
                    });
      
                     $("#date").datepicker(
                     { 
                      format: 'dd/mm/yyyy',
                      startDate: minDate, 
                      endDate: maxDate,
                      daysOfWeekDisabled: [0,6],
                      datesDisabled: ['30/03/2018','02/04/2018','07/05/2018','28/05/2018','27/08/2018','25/12/2018','26/12/2018']
                  });
      
      
              });
      
              var getAdjustedDate = function (adjustment) {
                  var today = new Date();
                  today.setDate(today.getDate() + adjustment);
      
                  var dd = today.getDate()-1;
                  var mm = today.getMonth()+1; //January is 0!
      
                  var yyyy = today.getFullYear();
                  if(dd<10){
                      dd='0'+dd;
                  };
      
                  if(mm<10){
                      mm='0'+mm;
                  };
      
                  return dd+'/'+mm+'/'+yyyy;
              };            
      
              </script>
      

      【讨论】:

      • 谢谢你,虽然有 2 个问题 - 1) 银行假期没有被禁用,2) 在我点击一个未选中的单选按钮后,该功能正在工作,在第一次加载时,日历显示为启用所有日期
      • 我测试了日历,银行假期被禁用。在第一次加载时,仅周六和周日以及银行假日被禁用。
      猜你喜欢
      • 2012-04-02
      • 2010-10-15
      • 2021-03-12
      • 1970-01-01
      • 2014-10-17
      • 1970-01-01
      • 1970-01-01
      • 2011-07-04
      • 2012-03-19
      相关资源
      最近更新 更多