Bootstrap Datepicker v1.9.0选周WW/YYYY格式关闭后值异常求助
问题原因
问题确实是Bootstrap Datepicker的默认机制导致:你初始化组件时设置了format: 'MM-DD-YYYY',当日期选择器关闭触发hide事件时,组件会自动按指定格式解析输入框内容并重新赋值。你在changeDate事件中手动写入的WW/YYYY格式不符合预设的日期格式规则,因此会被组件覆盖为异常值。
解决方案
方案1:关闭自动解析(修改量最小)
给datepicker添加forceParse: false配置,禁用组件关闭时自动解析重写输入框值的逻辑,同时补全给业务绑定用的隐藏域赋值的逻辑即可。
修改后的完整jQuery代码:
$(document).ready(function () { moment.locale('en', { week: { dow: 0, doy: 0 } // 周日为一周第一天 }); $("#weeklyDatePicker").datepicker({ format: 'MM-DD-YYYY', forceParse: false, // 核心配置,禁止组件自动覆盖输入框值 autoclose: true // 可选,选完日期自动关闭选择器,优化体验 }); $('#weeklyDatePicker').on('changeDate', function (e) { const selectDate = moment(e.date); const week = selectDate.week(); const year = selectDate.year(); const weekVal = `${week}/${year}`; // 赋值给展示输入框 $("#weeklyDatePicker").val(weekVal); // 赋值给后端绑定用的隐藏域,原代码遗漏了这一步 $(".weeklyDatePicker[type='hidden']").val(weekVal); }); });
额外优化:可以给#weeklyDatePicker输入框添加readonly属性,禁止用户手动输入,避免出现格式异常。
方案2:分离展示与逻辑层(稳定性更高)
如果担心关闭强制解析引发其他兼容问题,可以将日期选择器绑定到一个新增的隐藏输入框,所有日期计算逻辑都在隐藏节点处理,仅将最终格式化后的WW/YYYY值赋值给用户可见的展示输入框,从根本上避免格式冲突。
内容的提问来源于stack exchange,提问作者Henrique Pombo
相关产品推荐
相关产品推荐

