<el-form-item label="目录ID" prop="directoryId"> <el-input v-model="form.directoryId" placeholder="请输入目录ID" > </el-input> </el-form-item> export default { rules: { directoryId: [ {required: true, message: "目录id不能为空", trigger: "blur"}, { validator: this.checkDirectoryId, trigger: 'blur' }// 在失去焦点时进行校验 ], directoryName: [ {required: true, message: "目录名称不能为空", trigger: "blur"}, ], //排序不能为空 sort: [ {required: true, message: "排序不能为空", trigger: "blur"}, ], } methods:{ checkDirectoryId(rule, value, callback) { const existingDirectoryIds = []; for (let i = 0; i < this.tableData.length; i++) { existingDirectoryIds.push(this.tableData[i].directoryId); } console.log(existingDirectoryIds) if (existingDirectoryIds.includes(value)) { callback(new Error('该目录ID已存在')); } else { callback(); } } }这段代码为什么在目录id的输入框输入已有的数值,未进行正确的校验呢?
时间: 2024-04-11 14:33:19 浏览: 90
el-form 多层级表单的实现示例
在这段代码中,校验函数`checkDirectoryId`是在失去焦点时触发的,而输入框的校验是在输入时触发的。所以即使输入已有的数值,校验函数并没有被触发,导致没有进行正确的校验。
要解决这个问题,你可以改变校验的触发时机,将校验规则放在输入框的`change`事件中,这样在每次输入数值时都会触发校验函数。你可以将`trigger`属性设置为`change`,修改代码如下:
```javascript
rules: {
directoryId: [
{ required: true, message: "目录id不能为空", trigger: "blur" },
{ validator: this.checkDirectoryId, trigger: "change" } // 在输入时进行校验
],
// 其他规则...
},
```
这样修改后,在输入已有的数值时,校验函数会被正确触发,从而进行正确的校验。
阅读全文