解决表单提交时校验结束时间格式无效问题
解决表单提交时校验结束时间格式无效问题
您提供的代码中,起始时间和结束时间的校验逻辑是正确的。但在提交表单时,校验结束时间的格式无效。
问题原因:
在提交表单时,会触发表单的所有校验规则,包括结束时间的校验规则。如果结束时间的格式无效,即无法转换为有效的日期对象,就会触发校验失败。
解决方法:
在提交表单之前,先手动触发一次结束时间的校验。可以使用this.$refs.form.validateField('incomePeriodDateEnd')来手动触发结束时间的校验。这样在提交表单时,就会先进行结束时间的校验,如果格式无效,则会提示错误信息。
完整代码示例:
checkStartTime(rule, value, callback) {
if (!this.form.incomePeriodDateStart) {
callback(new Error('请输入起始时间'));
} else {
const startDate = new Date(this.form.incomePeriodDateStart);
if (isNaN(startDate.getTime())) {
callback(new Error('起始时间不能大于结束时间'));
} else {
this.form.incomePeriodDateEnd = '';
callback();
}
}
},
checkEndTime(rule, value, callback) {
if (!this.form.incomePeriodDateStart && !this.form.incomePeriodDateEnd) {
callback(new Error('请输入结束时间'));
} else {
const startDate = new Date(this.form.incomePeriodDateStart);
const endDate = new Date(this.form.incomePeriodDateEnd);
if (isNaN(endDate.getTime())) {
callback(new Error('结束时间格式无效'));
} else if (endDate < startDate) {
this.form.incomePeriodDateEnd = '';
callback(new Error('结束时间不能小于起始时间'));
} else {
callback();
}
}
},
submitForm() {
this.$refs.form.validateField('incomePeriodDateEnd', (errorMsg) => {
if (!errorMsg) {
// 结束时间格式校验通过
// 提交表单
// ...
}
});
}
在submitForm方法中,先手动触发结束时间的校验,然后根据校验结果决定是否提交表单。如果结束时间的格式校验通过,则可以继续执行提交表单的逻辑。
原文地址: https://www.cveoy.top/t/topic/pmkX 著作权归作者所有。请勿转载和采集!