laydate.type必须设为"year"才能启用原生年份选择模式,渲染纯年份列表;需搭配format:"yyyy"、value:"2026-01-01"等规范配置,否则显示异常或行为失控。

laydate.type 为什么必须设为 "year"
只选年份不是靠隐藏日历或 CSS 遮盖,而是用 type: "year" 切换面板类型。这是 laydate 原生支持的模式,会直接渲染一个纯年份列表(比如 2020–2030),不出现月份和日期控件。
常见错误是只改 format: "yyyy" 却保留 type: "date",结果界面还是完整日历,点选后返回值仍带月日(如 "2026-01-01"),根本没禁掉日逻辑。
format 和 value 怎么配才不出错
type: "year" 必须配 format: "yyyy",否则控制台会警告“format 与 type 不匹配”,且输入框显示异常(比如显示 "2026-07-01" 而非 "2026")。value 初始化不能传 "2026" 或数字 2026,laydate 内部按 Date 解析,会静默回退到当前日期。正确写法是:
-
value: "2026-01-01"(推荐,兼容性最好) -
value: new Date(2026, 0, 1)(月份从 0 开始) - 如果后端只返回
"2026",前端拼成"2026-01-01"再传
如何实现“一点即关”而不是点完还得按确定
默认行为是点完年份后要再点“确定”才赋值关闭。要实现点击年份立刻生效并关闭面板,必须在 change 回调里做两件事:
- 用
lay('#inputId').val(value)同步更新输入框值 - 紧接着执行
$(".layui-laydate").remove()移除浮层 - 别在
done里做——它只在点“确定”后触发 - 只改
val不删面板,会导致面板残留,用户再点别的年份,值已变但面板还在,体验割裂
min/max 为什么必须都设成字符串且闭合
限制只能选当前年份(2026),就得 min: "2026" 且 max: "2026"。漏掉 max 会让用户能选 2026 年及之后所有年份;传 new Date() 或对象会解析失败,回退到默认范围。
注意:min/max 只约束可选范围,不影响面板初始打开位置——想让面板一打开就停在 2026 年,还得靠 value 引导(比如 value: "2026-01-01")。
"2026",但如果你把 value 初始化错了,或者没配对 format,整个行为就会不可控——不是显示不对,就是点不动,或者点了不关。


















