JQuery UI - 日期选择器,禁用特定日期

22

我正在尝试使用JQuery UI禁用特定日期,但是我没有成功,以下是我的代码:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html lang="en">
<head>
<link rel="stylesheet" type="text/css" href="development-bundle/themes/ui-lightness/jquery.ui.all.css">
<style type="text/css">
.ui-datepicker .preBooked_class { background:#111111; }
.ui-datepicker .preBooked_class span { color:#999999; }
</style>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>jQuery UI Datepicker</title>
<script type="text/javascript" src="development-bundle/jquery-1.7.1.js"></script>
<script type="text/javascript" src="development-bundle/ui/jquery.ui.core.js"></script>
<script type="text/javascript" src="development-bundle/ui/jquery.ui.widget.js"></script>
<script type="text/javascript" src="development-bundle/ui/jquery.ui.datepicker.js"></script>

实例化日期选择器对象

<script type="text/javascript">

    $(function() {
    $( "#iDate" ).datepicker({

    dateFormat: 'dd MM yy',
    beforeShowDay: checkAvailability
    });

    })

获取需要在日历中禁用的日期

    var unavailableDates = ["9-3-2012","14-3-2012","15-3-2012"];

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

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

</script>
</head>
<body>
<input id="iDate">
</body>
</html>

它似乎不起作用,有什么办法可以解决这个问题。谢谢。

4个回答

42

看起来你在同一个输入框上两次调用了datepicker。虽然你的代码有点难以理解,但如果重新组织并删除第二次datepicker调用,一切应该都能正常工作:

<script type="text/javascript">
    var unavailableDates = ["9-3-2012", "14-3-2012", "15-3-2012"];

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

    $(function() {
        $("#iDate").datepicker({
            dateFormat: 'dd MM yy',
            beforeShowDay: unavailable
        });

    });
</script>

看这篇文章:disable-dates-in-datepicker


完美运作,安德鲁,我有一个快速的问题。我该如何调整它,以便不是将不可用日期硬编码在数组中,而是从数据库表中检索日期。谢谢。 - bobo2000
@bobo2000:这取决于您的服务器端技术。但我想您应该在页面加载时嵌入排除日期的数组,而不是在JavaScript中硬编码它们。 - Andrew Whitaker
使用PHP,我需要查询数据库然后将结果集填充到数组中吗? - bobo2000
@bobo2000:听起来没错。不过我对PHP不是很了解。这似乎是一个新问题的候选人 :) - Andrew Whitaker
这个可以工作,但我如何在不指定数组中的日期的情况下实现它?它说我需要接下来的三天。比如说如果明天来了,它会选择接下来的三天。 - Humphrey

0

非常有用的答案。如果你想要禁用特定的日期,可以按照以下步骤操作:

          $scope.dateOptions = {
            beforeShowDay: unavailable
          };

          function unavailable(date) {
                if (date.getDay() === 0) {
                    return [true, ""];
                } else {
                    return [false, "", "Unavailable"];
                }
          }     

以上代码只会启用星期天,其他所有日期都将被禁用。希望这能有所帮助。


0
var unavailableDates = ["23-09-2022", "24-09-2022", "25-09-2022"];
$('#res_date').datepicker({
  startDate: '-0m', // this for disable past days
  format: 'dd/mm/yyyy',
  todayHighlight:'TRUE',
  autoclose: true,
  datesDisabled: unavailableDates // for disable your specific days
});

0
为了解决“可用日期”的问题,你可以使用javascript中的includes()方法,并返回一个布尔值数组。
var availableDates = ["5-6-2023", "6-6-2023", "7-6-2023"];

function available(date) {
    dmy = date.getDate() + "-" + (date.getMonth() + 1) + "-" + date.getFullYear();

    return [availableDates.includes(dmy)];
}

$("#iDate").datepicker({
    dateFormat: 'dd MM yy',
    beforeShowDay: available
});

数组中的第二个元素是CSS类,第三个参数是可选的工具提示(https://api.jqueryui.com/datepicker/#option-beforeShowDay

值得一提的是,截至2023年,Jquery UI正在退出舞台,但它仍然是一个相当不错的工具集。


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