form表单校验时,数据有改变失去焦点时触发,数据没改变失去焦点时不触发该怎么写
时间: 2024-02-11 11:05:53 浏览: 209
在 Vue 的表单中,可以通过设置 `lazy` 属性为 `true` 来实现“数据有改变失去焦点时触发,数据没改变失去焦点时不触发”的校验。当 `lazy` 属性设置为 `true` 时,表单项的校验会在 `change` 或 `blur` 事件触发时才会执行,而在 `input` 事件触发时不会执行。因此,只有当表单项的值发生改变并失去焦点时,才会触发校验。
具体实现可以参考以下代码:
```html
<el-form ref="form" :model="formData" :rules="rules" :lazy="true">
<el-form-item label="姓名" prop="name">
<el-input v-model="formData.name" />
</el-form-item>
<el-form-item label="年龄" prop="age">
<el-input v-model.number="formData.age" />
</el-form-item>
<el-form-item>
<el-button type="primary" @click="submitForm">提交</el-button>
</el-form-item>
</el-form>
```
```javascript
export default {
data() {
return {
formData: {
name: '',
age: ''
},
rules: {
name: [
{ required: true, message: '请输入姓名', trigger: 'blur' }
],
age: [
{ required: true, message: '请输入年龄', trigger: 'blur' },
{ type: 'number', message: '年龄必须是数字', trigger: 'blur' },
{ min: 1, max: 120, message: '年龄必须在1-120之间', trigger: 'blur' }
]
}
}
},
methods: {
// 提交表单
submitForm() {
this.$refs.form.validate(valid => {
if (valid) {
// 校验通过,提交表单
console.log('表单校验通过')
} else {
// 校验不通过,提示错误信息
console.log('表单校验不通过')
}
})
}
}
}
```
在上面的代码中,我们在 `el-form` 上设置了 `lazy` 属性为 `true`,然后在校验时调用了 `validate` 方法。这样,当表单项失去焦点时,就会触发校验,而在输入框输入时不会触发校验。
阅读全文