【问题标题】:How to disable past dates in calendar in date-picker in javascript/jquery?如何在javascript/jquery的日期选择器中禁用日历中的过去日期?
【发布时间】:2019-01-02 14:40:16
【问题描述】:

我正在处理website,我希望在其中禁用日历中的过去日期。

我用来制作日历的 HTMLJQuery 代码是:

$("#startdate_datepicker").datepicker({numberOfMonths:[1, 2]});
$("#enddate_datepicker").datepicker({numberOfMonths:[1, 2]});
<link href="https://cdn.bootcss.com/jqueryui/1.12.1/jquery-ui.css" rel="stylesheet"/>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
<div class="dates">
   <div class="start_date" style="width:50%;margin-right:3%;">
      <input readonly="readonly" class="form-control start_date  mb-4" type="text" placeholder="start date" id="startdate_datepicker">
   </div>
   <div class="end_date" style="width:50%;margin-left:3%;">
      <input readonly="readonly" class="form-control  end_date  mb-4" type="text" placeholder="end date" id="enddate_datepicker">
   </div>
</div>



问题陈述:

我想知道我应该在上面的代码中进行哪些更改以便在选择开始日期后,在选择结束日期时应该禁用开始日期之前的日期

【问题讨论】:

    标签: javascript jquery html datepicker calendar


    【解决方案1】:

    您可以使用the option=beforeShowDay of JQuery UI,然后像下面的演示那样自定义每天的样式:

    作为 beforeShowDay 的 JQuery UI 指南:

    以日期为参数且必须返回数组的函数 与:

    [0]: true/false indicating whether or not this date is selectable
    [1]: a CSS class name to add to the date's cell or "" for the default presentation
    [2]: an optional popup tooltip for this date
    

    let startDateUI = $("#startdate_datepicker").datepicker({
      numberOfMonths:[1, 2],
      todayHighlight: true,
      beforeShowDay: function (calDate) {
          return calDate - new Date() < 0 ? [false, '', ''] : [true, '','']
      }
    });
    $("#enddate_datepicker").datepicker({
      numberOfMonths:[1, 2],
      todayHighlight: true,
      beforeShowDay: function (calDate) {
          let selectedStartDate = $( "#startdate_datepicker" ).datepicker( "getDate" )
          return calDate - selectedStartDate < 0 ? [false, 'disable-day', 'not available day!!!'] : [true, '','']
      }
    });
    .disable-day{
      background-color:red;
    }
    <link href="https://cdn.bootcss.com/jqueryui/1.12.1/jquery-ui.css" rel="stylesheet"/>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
      <script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
    <div class="dates">
       <div class="start_date" style="width:50%;margin-right:3%;">
          <input readonly="readonly" class="form-control start_date  mb-4" type="text" placeholder="start date" id="startdate_datepicker">
       </div>
       <div class="end_date" style="width:50%;margin-left:3%;">
          <input readonly="readonly" class="form-control  end_date  mb-4" type="text" placeholder="end date" id="enddate_datepicker">
       </div>
    </div>

    【讨论】:

    • @Sphnix 我已接受您的回答。我有一个快速的问题。我想知道如何禁用用户无法在 end date 中选择的日期的悬停。
    • @user5447339 尝试返回[false, '', '']
    • @user5447339 已更新。为$("#startdate_datepicker") 添加了beforeShowDay 选项
    • =。 =,看来你的图书馆和我的不一样。但是一个解决方案:返回[false, 'disable-day', ''],然后参考this answer覆盖悬停效果。 提示:打开浏览器控制台,您会看到这些类 (ui-datepicker-unselectable ui-state-disabled) 已应用于您网站中不可用天数的 Dom 元素。
    • 我没有找到你提到的效果的有用选项。但一种可能的解决方案是监听这些天的悬停事件,然后通过 css 选择器在开始日期和悬停日期之间应用 css 样式。您最好发布一个新问题以获得更好的答案。
    【解决方案2】:

    使用.datepicker("option", "minDate", &lt;value of start date&gt;) 设置可选择的最早日期。 "maxDate" 将允许您设置最新的可选日期。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-04-15
      • 2016-07-03
      • 2019-11-29
      • 1970-01-01
      • 2018-10-16
      • 1970-01-01
      • 2013-03-23
      • 1970-01-01
      相关资源
      最近更新 更多