date类型字段初始化异常:Voting period选择后From字段显示问题排查
问题解答
1. 选择“Voting period”后From字段显示jj - mm - aaaa的原因
<input type="date">类型的输入框要求value必须是ISO 8601标准格式(YYYY-MM-DD),如果传入的格式不匹配,浏览器会显示对应语言环境下的默认占位符(jj - mm - aaaa是法语环境的“日-月-年”占位符)。你的代码里存在两个致命错误:
- 给日期字符串添加了多余的双引号,导致最终值是带引号的格式,完全不符合date输入的要求;
- 日期顺序错误,使用了
dd-mm-yyyy格式,而非标准的YYYY-MM-DD。
2. 其他选项能正常显示的原因
- 选择“Question nr”时,From字段是
type="text"文本输入框,这类输入框没有格式限制,可以接受任意字符串(包括9999); - 选择“Creation date”时,From字段用
From.valueAsDate = today;直接赋值Date对象,浏览器会自动转换成标准ISO格式显示;To字段赋值的"2024-01-02"刚好是符合要求的ISO格式,因此能正常识别。
3. formattedLastSunday无法赋值给From.value的原因
核心是两个格式错误:
- 格式顺序不匹配:date输入框仅识别
YYYY-MM-DD格式,你生成的是dd-mm-yyyy顺序的字符串,浏览器无法解析为有效日期; - 多余的引号包裹:你给字符串添加了双引号,导致最终值是
"dd-mm-yyyy"这种带引号的格式,不属于合法的日期字符串,因此赋值失败。
修复后的关键代码片段
else { // (p = 3) From.setAttribute('type', 'date'); From.setAttribute('size', '8'); var now = new Date(); var today = new Date(now.getFullYear(), now.getMonth(), now.getDate()); var lastSunday = new Date(today.setDate(today.getDate() - today.getDay())); const yyyy = lastSunday.getFullYear(); let mm = lastSunday.getMonth() + 1; // 月份从0开始,需+1 let dd = lastSunday.getDate(); if (dd < 10) dd = '0' + dd; if (mm < 10) mm = '0' + mm; // 修正:使用ISO标准格式,移除多余引号 const formattedLastSunday = `${yyyy}-${mm}-${dd}`; From.value = formattedLastSunday; // 现在可正常赋值 }
内容的提问来源于stack exchange,提问作者Jo Van Damme
相关产品推荐
相关产品推荐

