jQuery UI日期选择器 - 禁用特定日期

23

有没有(简单的)方法可以设置jQuery UI日期选择器不允许选择特定的、预定的日期?

我能够使这种方法起作用,但它会产生一个null错误,这会导致它在IE中无法显示。

'natDays[...].0'为 null 或不是对象

谢谢您提前的帮助!

更新:如果我包含一些代码可能会更好,对吧?无论如何,大部分代码都来自上述线程:

natDays = [
        [7, 23], [7, 24], [8, 13], [8, 14], 
    ];

    function nationalDays(date) {
        for (i = 0; i < natDays.length; i++) {
            if (date.getMonth() == natDays[i][0] - 1
            && date.getDate() == natDays[i][1]) {
                return [false, natDays[i][2] + '_day'];
            }
        }
        return [true, ''];
    }

    function noWeekendsOrHolidays(date) {
        var noWeekend = $.datepicker.noWeekends(date);
        if (noWeekend[0]) {
            return nationalDays(date);
        } else {
            return noWeekend;
        }
    }


    $(function() { 
        $("#datepicker").datepicker({
            inline: true,
            minDate: new Date(2009, 6, 6), 
            maxDate: new Date(2009, 7, 14), 
            numberOfMonths: 2, 
            hideIfNoPrevNext: true,
            beforeShowDay: $.datepicker.noWeekends,
            altField: '#alternate',
        }); 
    });

再次感谢!


你能否把你的代码粘贴出来,让我看看哪里出错了? - TStamper
需要至少包含问题所在行的代码示例... - Tracker1
6个回答

15

这里有一种方法可以禁用特定日期的选择:

var unavailableDates = ["9-5-2011","14-5-2011","15-5-2011"];

function unavailable(date) {
  dmy = date.getDate() + "-" + (date.getMonth()+1) + "-" + date.getFullYear();
  if ($.inArray(dmy, unavailableDates) < 0) {
    return [true,"","Book Now"];
  } else {
    return [false,"","Booked Out"];
  }
}

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

来源:jQuery - 日期选择器 - 禁用特定日期


只是一点说明 - 这是日期的D-M-Y格式。要使用M-D-Y格式,请将dmy更改为(date.getMonth()+1) + "-" + date.getDate() + "-" + date.getFullYear(); - Scott C Wilson

11
你可以使用beforeShowDay选项。我需要禁用每个月28日之后的所有日期。这是我的代码。
$('.datepicker').datepicker({
    dateFormat: "yy-mm-dd",
    beforeShowDay: function(date) {
        var day = date.getDate();
        if (day > 28) {
            return [false];
        } else {
            return [true];
        }
    }
});

这是有关此事的更多信息:http://api.jqueryui.com/datepicker/#option-beforeShowDay 传递到beforeShowDay回调函数中的日期变量是JavaScript日期对象,因此可以使用各种库进行格式化,可以使用date.getTime()检索时间戳。

@WHK,很抱歉我不理解你的问题。 - Alex K

9

你尝试过在“natDays”前面使用“var”关键字声明吗?

另外,你的“natDays”定义末尾有一个多余的逗号。

由于数组中只有两个项目,“natDays[i][2]”不起作用,请尝试使用“''”。

另外,你需要正确设置“beforeShowDay”函数名称 - 看起来它甚至没有调用你的自定义函数。


嗯...刚试了一下。没有成功。这是IE返回的错误:“natDays [...] .0”为空或不是对象 - Sam
看一下我最近的编辑...它没有被正确定义(多了一个逗号) - Chris Haines
好的...我觉得我们有所进展了!多余的逗号修复了IE8中的问题。不过你能展示一下你第二条评论的意思吗?(我是JS新手...你能看出来吗?)谢谢! - Sam

1
beforeShowDay: $.datepicker.noWeekends,

将会

beforeShowDay: noWeekendsOrHolidays,

1

IE的问题很可能在以下行:

altField: '#alternate',
}); 

尝试移除逗号符号,应该可以正常工作。

0
 var unavailableDates = ["19-8-2014","14-9-2014"];

 function unavailable(date) {
    dmy = date.getDate() + "-" + (date.getMonth()+1) + "-" +date.getFullYear();
    if ($.inArray(dmy, unavailableDates) < 0) {
     return [true,"","Book Now"];
    } else {
  return [false,"","Booked Out"];
  }
 }

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

实时演示:http://jsfiddle.net/vfod0krm/


只是需要注意的是,使用minDate/maxDate选项禁用日期后,这将在“预订”按钮上显示工具提示。 - Sandra

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接