DatePicker中beforeShowDay返回数组时始终为true的问题排查
问题分析与解决方案
看起来你遇到的问题是因为你使用的是bootstrap-datepicker插件,但误用了jQuery UI Datepicker的beforeShowDay返回格式!
核心原因
bootstrap-datepicker和jQuery UI Datepicker的beforeShowDay回调规则完全不同:
- jQuery UI的该回调支持返回
[启用状态, 样式类名, 提示文本]这样的数组格式 - 但bootstrap-datepicker并不识别这种数组——它会把任何非布尔、非对象的真值(比如你返回的非空数组)都判定为「日期可用」,所以即使数组第一个元素是
false,日期依然可选,同时样式类也不会正确应用。
修复方案
针对bootstrap-datepicker,你需要改用对象格式来同时指定禁用状态和样式类:
修改你的jourDispo函数如下:
function jourDispo(date) { console.log("I'm in jourDispo"); // 用对象明确指定禁用状态和样式类 return { enabled: false, classes: 'red' }; }
完整修改后的JS代码
$("#date").datepicker({ autoclose: true, language: 'fr', format: 'dd/mm/yyyy', beforeShowDay: jourDispo }); function jourDispo(date) { console.log("I'm in jourDispo"); return { enabled: false, classes: 'red' }; }
额外说明
bootstrap-datepicker的beforeShowDay支持的返回值类型包括:
- 布尔值:
true(启用日期)/false(禁用日期) - 字符串:仅指定样式类,日期默认启用
- 对象:包含
enabled(布尔)、classes(字符串)、tooltip(字符串)三个可选属性,能同时控制状态、样式和提示
你的配置选项(autoclose、language)是bootstrap-datepicker特有的,这也确认了你使用的是该插件,一定要遵循它的API规范哦。
内容的提问来源于stack exchange,提问作者Alexandre B.
相关产品推荐
相关产品推荐

