突出显示,禁用jQuery UI datepicker中的特定日期

时间:2013-10-16 04:58:55

标签: jquery datepicker jquery-ui-datepicker

在这里,我想实现以下

  1. 突出显示日期选择器中的所有假期
  2. 禁用日期选择器中的特定日期
  3. 在日期选择器中禁用特定周末
  4. 我有各自的片段,但我想要一起

    小提琴:Working Demo

    突出显示假期

    var holydays = ['10/17/2013', '10/18/2013', '11/2/2013'];
    
    function highlightDays(date) {
        for (var i = 0; i < holydays.length; i++) {
            if (new Date(holydays[i]).toString() == date.toString()) {
                return [true, 'highlight'];
            }
        }
        return [true, ''];
    
    }
    
    $(function () {
        $("#dp").datepicker({
            minDate: 0,
            dateFormat: 'mm/dd/yy',
            inline: true,
            numberOfMonths: [1, 2],
            dayNamesMin: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],
            beforeShowDay: highlightDays,
        });
    });
    

    停用特定日期

    var disabledDays = ["10-20-2013", "10-21-2013", "11-15-2013", "11-17-2013"];
        function disableAllTheseDays(date) {
            var m = date.getMonth(), d = date.getDate(), y = date.getFullYear();
            for (i = 0; i < disabledDays.length; i++) {
                if($.inArray((m+1) + '-' + d + '-' + y,disabledDays) != -1) {
                    return [false];
                }
            }
            return [true];
        }
    

    停用周末

    $(function() {
            $( "#availability" ).datepicker({
                minDate: 0,
                dateFormat: 'mm/dd/yy',
                inline: true,
                numberOfMonths: [1, 2],
                dayNamesMin: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],
                beforeShowDay: $.datepicker.noWeekends
            });
        });
    

    任何人都可以帮助我..

    提前致谢。

4 个答案:

答案 0 :(得分:4)

改变:

$(function () {
    $("#dp").datepicker({
        minDate: 0,
        dateFormat: 'mm/dd/yy',
        inline: true,
        numberOfMonths: [1, 2],
        dayNamesMin: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],
        beforeShowDay: setCustomDate // <-----change function
    });
});

添加功能:

function setCustomDate(date) {
    var clazz = "";
    var arr1 = highlightDays(date);
    if (arr1[1] != "") clazz = arr1[1];

    var arr2 = disableAllTheseDays(date);
    var arr3 = $.datepicker.noWeekends(date);

    return [(!arr2[0] || !arr3[0]) ? false : true, clazz];
}

答案 1 :(得分:2)

我们现在在2014年,需要一个最小的代码。 这是我禁用日期的方法。

我的变量'specific',0&lt; = specific&lt; = 7

in my demo :

1 = sunday 2 = saturday 4 = Monday to friday

if specific == 5 that mean 4 + 1 so i allow Monday till friday + sunday.

7表示允许选择的所有日期。 请注意,我现在只允许选择月份+ 1

$( "#datepicker" ).datepicker({
    minDate:0,
    maxDate: '+1M-1D',
    dateFormat: "yy-mm-dd",
    beforeShowDay: function(date) {
        var day = date.getDay();
        if(day == 6)
            return [(specific & 2) > 0, ''];
        else if(day == 0)
            return [(specific & 1) > 0, ''];
        else
            return [(specific & 4) > 0, ''];
    }
});

答案 2 :(得分:0)

仅供将来参考。因为我正在寻找相同的东西,并发现这些相同的功能在很多不同的地方禁用日子:

http://www.spiceforms.com/blog/how-to-disable-dates-in-jquery-datepicker-a-short-guide/ https://davidwalsh.name/jquery-datepicker-disable-days

var disabledDays = ["10-20-2013", "10-21-2013", "11-15-2013", "11-17-2013"];

function disableAllTheseDays(date) {
     var m = date.getMonth(), d = date.getDate(), y = date.getFullYear();
     for (i = 0; i < disabledDays.length; i++) {
         if($.inArray((m+1) + '-' + d + '-' + y,disabledDays) != -1) {
             return [false];
         }
     }
     return [true];
}

但是由于您使用的是inArray,因此不需要for,从而产生更简单,更高效的功能:

var disabledDays = ["4-2-2016", "4-4-2016"];

function disableAllTheseDays(date) {
     var m = date.getMonth(), d = date.getDate(), y = date.getFullYear();
     if($.inArray((m+1) + '-' + d + '-' + y,disabledDays) != -1) return [false];
     return [true];
}

答案 3 :(得分:0)

这个对我有用。在关闭身体标签之前放置。

function DisableMonday(date) {
      var day = date.getDay();
     if (day == 1) {
     return [false,"","Unavailable"] ; 
     } else { 
     return [true] ;
     } 
    }
    jQuery(function($){
        $('input[name="datum"]').datepicker('option', 'beforeShowDay', DisableMonday).datepicker('refresh');
    });