代码之家  ›  专栏  ›  技术社区  ›  Mog

使用jQuery UI日期选择器自定义范围内的特定禁用日期

  •  4
  • Mog  · 技术社区  · 10 年前

    我将jQueryUI日期选择器用于用户请求参观学校的表单。旅游有一个日期范围,在该范围内,网站管理员可能会禁用某些预订的日期。到目前为止没有问题:

    /* array of booked dates generated from CMS backend */
    var disabledDates = [
        '2015-05-06',
        '2015-05-08' // examples
    ];
    
    $('[name="date_of_visit"]').datepicker({
        minDate: '4/30/2015', // Range start
        maxDate: '10/1/2015', // Range end
        beforeShowDay: function(date) { // Disable custom dates
            var string = jQuery.datepicker.formatDate('yy-mm-dd', date);
            return [$.inArray(string, disabledDates) == -1];
        }
    });
    

    我得到了 beforeShowDay 本文代码: Jquery UI datepicker. Disable array of Dates

    我知道我可以使用第二个参数向禁用的元素添加一个类,但它会将其添加到所有禁用的日期,包括 minDate maxDate :

    beforeShowDay :将日期作为参数的函数,必须 返回一个数组,其中包含:

    0:true/false,表示此日期是否可选择
    1: 要添加到日期单元格的CSS类名,或默认为“” 演示
    2: 此日期的可选弹出工具提示

    该函数在日期选择器中的每一天调用之前 显示。

    然而,客户要求只有“已预订”的日期有一个视觉指示,表明该日期不可用(与默认禁用状态不同)。不会有很多,可能有4个或5个。这对我来说很有意义。

    是否有某种方法可以自定义 放映日前 在我的设置中运行,或其他解决方案来实现我的目标? jsFiddle demo

    1 回复  |  直到 8 年前
        1
  •  5
  •   Chand Prakash    10 年前

    韦斯利, 我查看了您的需求,并查看了您需要的需求,我认为这也是我需要的,因为它本身有点独特,所以我研究了代码并做出了您想要的。我正在粘贴下面的代码,并对其进行一些解释:-

    以下是Jquery代码:-

    var disabledDates = [
        '2015-05-06',
        '2015-05-08'
    ];
    
    $('input').datepicker({
        minDate: '4/30/2015',
        maxDate: '10/1/2015',
        beforeShowDay: function(date){
             var str = jQuery.datepicker.formatDate('yy-mm-dd', date);
             var minDateArr = $(this).datepicker( "option", "minDate" ).split('/')
    
            var minDate = new Date(minDateArr[2],minDateArr[0]-1,minDateArr[1]); //Don't remove the -1 from minDateArr[0]-1 as the Javascript dates starts with 0.
            if ($.inArray(str, disabledDates) != -1){
                return  [false, 'special']
            }
            else if(date < minDate ){
                 return [false, 'not-special']
            }
            else{
                return [true,"special"];
            }
        }
    });
    

    CSS中的一些操作:-

    .special span {
        color: red !important; /* should only apply to may 6 and 8 */
    }
    .not-special span {
        color: green !important; 
    }
    

    最重要的是必须有一个输入标签:-

    <input>
    

    同样,以下是Js Fiddle链接:- http://jsfiddle.net/ckk6hzzu/

    希望这是您所需要的,并希望这将帮助其他人在预订/预订网站时使用。