SurveyJS如何限制月份输入禁止选择未来月份?
解决SurveyJS月份选择器maxValueExpression无效问题
当使用SurveyJS的inputType: "month"单行输入框时,直接用"maxValueExpression": "today()"会导致无论选择哪个月份都触发错误提示,这是因为月份输入框返回的是YYYY-MM格式的字符串,而today()返回的是完整的Date对象,两者类型不匹配,比较逻辑失效。
要实现「允许当前及过去月份、禁止未来月份、规则自动更新」的需求,只需将today()格式化为和输入值一致的YYYY-MM格式即可,具体步骤如下:
解决方案:格式化当前日期为月份格式
修改月份输入框的maxValueExpression,使用SurveyJS内置的formatDate函数将当前日期转换为yyyy-MM格式:
"maxValueExpression": "formatDate(today(), 'yyyy-MM')"
修改后的完整示例JSON
{ "pages": [ { "name": "page1", "elements": [ { "type": "text", "name": "d", "title": "Date input (works)", "isRequired": true, "inputType": "date", "maxValueExpression": "today()" }, { "type": "text", "name": "m", "title": "Month input (fixed)", "isRequired": true, "inputType": "month", "maxValueExpression": "formatDate(today(), 'yyyy-MM')" } ] } ] }
原理说明
formatDate(today(), 'yyyy-MM')会动态生成当前月份的YYYY-MM字符串(比如2024-05),和月份输入框的返回值格式完全一致;- 字符串比较时,
YYYY-MM格式的月份会按年份、月份顺序自然排序,确保未来月份(如2024-06)会被判定为大于当前值; today()是动态函数,会随系统日期自动更新,无需手动调整规则。
内容的提问来源于stack exchange,提问作者Ariel Piyale-Anisman
相关产品推荐
相关产品推荐

