要实现仅选择年份并一点即关,需设type: "year"和format: "yyyy",min/max均设为"2026",value初始化为"2026",change回调中用lay().val()更新输入框并$(".layui-laydate").remove()移除面板,移动端trigger建议设为"focus"。
type: "year" 必须配 format: "yyyy"
只选年份不是靠隐藏日历,而是用 type: "year" 切换面板类型。但不配 format: "yyyy" 的话,输入框里会显示完整日期(比如 "2026-07-01"),而不是你想要的 "2026"。laydate 会警告“format 与 type 不匹配”,且返回值格式不可控。
min/max 必须写字符串,且范围要闭合
限制只能选当前年份(2026),就得把 min 和 max 都设成 "2026"。别传 new Date() 或对象,laydate 初始化时不认;也别漏掉 max——只设 min 会让用户能选 2026 年及之后所有年份。
-
min: "2026"+max: "2026"→ 仅显示 2026 年可选,面板里其他年份置灰 - 如果写
min: "2026-01",laydate 会解析失败,回退到默认行为 - value 初始化也得落在范围内,比如
value: "2026"或value: new Date(2026, 0, 1)
change 回调里不删浮层,一点即关就失效
默认行为是点完年份还得点“确定”才关闭面板。要实现“一点即关”,必须在 change 里同步输入框并手动移除浮层:
- 用
lay('#inputId').val(value)更新输入框值 - 紧接着执行
$(".layui-laydate").remove()干掉面板 - 别在
done里做这事——它只在点“确定”后触发 - 常见错误:只改了
val却没删面板,结果用户再点别的年份,面板还在,值已变,体验割裂
移动端 trigger 设成 "focus" 更稳
在安卓微信或部分 WebView 里,trigger: "click"(默认)容易被软键盘弹出干扰定位。改成 trigger: "focus" 可避免浮层偏移,但要注意 input 失焦时面板会自动收起,所以别在 focus 后立刻 blur。
另外,type: "year" 下返回值就是纯字符串(如 "2026"),不用截取,这点比 type: "month" 省心——后者返回的仍是 "2026-07-01",得自己处理。











