如何移除当前日期高亮并禁止选择当前及未来日期?
搞定jQuery UI Datepicker的两个问题:禁用当前+未来日期、去掉今日高亮
1. 禁用当前及未来日期
你现在用的maxDate: 0是允许选择今天的,要把今天和以后的日期都禁掉,把maxDate改成-1(代表昨天)就行,修改后的代码:
$(".datepick").datepicker("destroy"); $(".datepick").datepicker({ dateFormat: 'dd/mm/yy', showOtherMonths: true, selectOtherMonths: true, maxDate: -1, // 核心改动:禁用今天及之后的日期 });
2. 移除今天日期的高亮
你直接执行removeClass的代码没效果,是因为datepicker是动态渲染的,你跑代码的时候目标元素可能还没生成,而且切换月份时还会重新渲染。给你两个靠谱的解决办法:
方法一:用CSS直接覆盖(最省心)
写几行CSS把今天的高亮样式抹掉,不用折腾JS,还能适配月份切换:
.ui-datepicker-today a.ui-state-highlight { background: transparent; border-color: #ccc; color: #333; /* 和普通日期样式对齐即可 */ }
方法二:用datepicker的beforeShowDay事件处理
这个事件会在每个日期渲染前触发,刚好可以同时处理今天的禁用状态和高亮问题,一举两得:
$(".datepick").datepicker("destroy"); $(".datepick").datepicker({ dateFormat: 'dd/mm/yy', showOtherMonths: true, selectOtherMonths: true, maxDate: -1, beforeShowDay: function(date) { const today = new Date(); today.setHours(0, 0, 0, 0); // 判断当前日期是否为今天 if (date.getTime() === today.getTime()) { // 返回数组:[是否可点击, 自定义类名, 提示文本] return [false, '', '今天不能选']; } return [true, '', '']; } });
这里因为已经禁用了今天,直接返回[false, '', ''],既不能点击,也不会生成高亮样式。
内容的提问来源于stack exchange,提问作者SPIDEY JOE
相关产品推荐
相关产品推荐

