如何提醒用户日期选择标准?

问题描述 投票:0回答:2

我看到这里有人问这个问题: 选择禁用日期时提醒用户 不幸的是,从提供的答案中没有什么可收集的。

我们有一个要求,防止用户从日期选择器中选择超过 60 天的天数。

用户也不允许选择大于当前日期的日期。

超过 60 天的天数会变灰,就像比今天的日期大的天数会变灰。

下面的脚本表明,就这些条件而言,它工作得很好。

但是,由于我们的用户不能选择超过 60 天的以前日期,也不能选择大于当前日期的日期,他们报告说我们的系统不允许他们选择他们喜欢的日期。

我们建议的解决方案是在尝试点击这些日期时向用户发出警告,告知这些日期是不允许的。

任何想法如何向下面的脚本添加警告消息,通知用户他/她正在点击的日期是不允许的?

下面是工作脚本。

<!doctype html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <link rel="stylesheet" href="//code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css">
  <link rel="stylesheet" href="/resources/demos/style.css">
  <script src="https://code.jquery.com/jquery-1.12.4.js"></script>
  <script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
<script type="text/javascript">
$(function() {
$('#datepicker').datepicker({ minDate: -60, maxDate: 0 });
});
</script>
</head>
<body>
<p>Date: <input type="text" id="datepicker"></p>
</body>
</html>

如果有帮助,这是一个 jQuery UI Datepicker。

非常感谢

javascript html jquery jquery-ui jquery-ui-datepicker
2个回答
0
投票

您可以使用 jQuery UI Datepicker 的 beforeShowDay 选项来自定义日历中各个日期的外观和行为。日历中的每一天都会调用 beforeShowDay 函数,并接收一个 Date 对象作为其参数。您可以使用此函数检查日期是否在允许范围内,如果不在允许范围内,则返回一个带有类名的数组和一个可选的工具提示消息,以指示日期被禁用以及原因。

要在单击禁用日期时显示警报消息,您可以将 onSelect 函数添加到 Datepicker 以检查所选日期是否被禁用,如果是,则向用户显示警报消息。

这是一个示例,说明如何修改现有脚本以添加这些功能:

    $(function() {
  var today = new Date();
  var sixtyDaysAgo = new Date();
  sixtyDaysAgo.setDate(today.getDate() - 60);
  
  $('#datepicker').datepicker({
    minDate: sixtyDaysAgo,
    maxDate: today,
    beforeShowDay: function(date) {
      var date1 = new Date();
      date1.setDate(today.getDate() - 60);
      var date2 = new Date();
      date2.setDate(today.getDate() + 1);
      if (date < date1 || date > date2) {
        return [false, 'disabled', 'This date is outside the allowed range'];
      } else {
        return [true, ''];
      }
    },
    onSelect: function(dateText, inst) {
      var selectedDate = $(this).datepicker('getDate');
      var disabledDates = $(this).datepicker('option', 'beforeShowDay');
      if (disabledDates(selectedDate)[0] === false) {
        alert('This date is outside the allowed range');
        $(this).val('');
      }
    }
  });
});

在这个修改后的脚本中,我们首先定义了两个Date 对象来表示今天的日期和60 天前的日期。然后我们使用这些日期来设置 Datepicker 的 minDate 和 maxDate 选项。

接下来,我们定义 beforeShowDay 函数来检查日期是否在允许的范围内。如果日期超出范围,我们返回一个包含 false 值的数组以禁用日期,禁用类将日期设置为灰色,并返回一条工具提示消息来解释日期被禁用的原因。

最后,我们向 Datepicker 添加一个 onSelect 函数,用于检查所选日期是否被禁用,如果是,则向用户显示一条警告消息并清除输入字段。

请注意,onSelect 函数还通过使用所选日期调用 beforeShowDay 函数并检查返回数组的第一个元素来检查日期是否被禁用。这是必要的,因为 onSelect 函数在 beforeShowDay 函数之前被调用,后者还没有机会将日期标记为禁用。


0
投票

<!doctype html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <link rel="stylesheet" href="//code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css">
  <link rel="stylesheet" href="/resources/demos/style.css">
  <script src="https://code.jquery.com/jquery-1.12.4.js"></script>
  <script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
  <script>
    $(function() {
      $("#datepicker").datepicker({
        minDate: -60,
        maxDate: 0
      });
    });
  </script>
</head>
<body>
  <p>Date: <input type="text" id="datepicker"></p>
</body>
</html>

更简单的方法,看看这是否是您解决请求所需要的。

© www.soinside.com 2019 - 2024. All rights reserved.