求助:jQuery Datepicker未实现指定日期范围限制逻辑
日期选择框限制逻辑实现方案
要实现你描述的需求,需要调整jQuery UI Datepicker的配置,核心是给fromDate添加日期选择后的触发逻辑,动态修改toDate的可选范围,同时修正两个输入框的最大可选日期限制:
核心修改点
- 给
fromDate设置maxDate: 0,确保它的最大可选日期为当前日期 - 为
fromDate添加onSelect事件,判断选中日期是否为当日:- 如果是当日,将
toDate的最小可选日期设为当前日期往前90天 - 如果不是当日,移除
toDate的最小日期限制(可根据实际需求调整)
- 如果是当日,将
- 保持
toDate的maxDate: 0,确保它的最大可选日期始终为当前日期
完整代码
HTML部分
<link href="//cdnjs.cloudflare.com/ajax/libs/jqueryui/1.11.4/jquery-ui.css" rel="stylesheet"/> <script src="//cdnjs.cloudflare.com/ajax/libs/jquery/2.2.4/jquery.js"></script> <script src="//cdnjs.cloudflare.com/ajax/libs/jqueryui/1.11.4/jquery-ui.js"></script> <input id="fromDate" type="text" value="16/02/2024"> <input id="toDate" type="text" value="16/02/2024">
JavaScript部分
$(function() { // 初始化fromDate日期选择器 $("#fromDate").datepicker({ dateFormat: 'dd/mm/yy', changeMonth: true, changeYear: true, maxDate: 0, // 最大可选日期为当前日期 defaultDate: null, onSelect: function(selectedDate) { var selected = $(this).datepicker('getDate'); var today = new Date(); // 去除时间部分,仅比较日期 today.setHours(0, 0, 0, 0); selected.setHours(0, 0, 0, 0); if (selected.getTime() === today.getTime()) { // 选中当日时,设置toDate的最小日期为往前90天 $("#toDate").datepicker('option', 'minDate', '-90d'); } else { // 非当日时,移除toDate的最小日期限制 $("#toDate").datepicker('option', 'minDate', null); } } }).datepicker("setDate", new Date()); // 初始化toDate日期选择器 $("#toDate").datepicker({ dateFormat: 'dd/mm/yy', changeMonth: true, changeYear: true, defaultDate: null, maxDate: 0, // 最大可选日期为当前日期 minDate: '-90d' // 初始默认最小日期(因为fromDate默认选中当日) }).datepicker("setDate", new Date()); });
说明
- 日期比较时去除了时间部分,避免因时分秒不同导致判断错误
- 初始状态下
fromDate选中当日,因此toDate默认限制在近90天内 - 当
fromDate切换到非当日日期时,toDate恢复无最小日期限制(可根据实际需求调整这部分逻辑)
内容的提问来源于stack exchange,提问作者Nadeem
相关产品推荐
相关产品推荐

