一、form.validateFields() 不执行

问题:

提价表单时,发现验证不通过时正常提醒,但验证通过后点击提交又没反应。最后发现是因为validateFields函数没被执行,通过一步步排查原来是字段验证的部分有问题。

const validateCode = (rule, value, callback) => {
	if (value == '') {
		callback(new Error('请输入字典编号'));
	} 
    else if(!/^[A-z0-9-_]+$/.test(value)){
		callback(new Error('请输入正确格式编号'));
	}
	else if(value.length>32){
		callback(new Error('最大长度为 32 个字符'));
	}
};

 上面的代码中,在字典编号格式验证通过后,没有写else,没有任何动作,当然也没有调用callback 。可是在 antd 中明确写到自定义校验(注意,callback 必须被调用) ,所以造成了悲剧。

 既然问题找到了,哪就好解决了,接下来加入else判断即可:

const validateCode = (rule, value, callback) => {
  if (value == '') {
    callback(new Error('请输入字典编号'));
  } 
  else if(!/^[A-z0-9-_]+$/.test(value)){
    callback(new Error('请输入正确格式编号'));
  }
  else if(value.length>32){
    callback(new Error('最大长度为 32 个字符'));
  }
  else{
    callback()
  }
};

正好我的同事也遇到了相似的问题,我想着小露一手的时候到了。不出意外的话...意外就出现了。

 先看一下代码:

validatePhone(rule, value, callback) {
      if (!value) {
        callback()
      } else {
        if (new RegExp(/^1[3|4|5|7|8][0-9]\d{8}$/).test(value)) {
          var params = {
            tableName: 'sys_user',
            fieldName: 'phone',
            fieldVal: value,
            dataId: this.userId
          }
          duplicateCheck(params).then(res => {
            if (res.success) {
              callback()
            } else {
              callback('手机号已存在!')
            }
          })
        } else {
          callback('请输入正确格式的手机号码!')
        }
      }
    }

咋一看没问题吧,每一个判断下都有回调函数callback。离谱的是最后找了个把小时才发现原来是if判断里有一个请求API(duplicateCheck)没有引入,关键是还没有任何报错提示。

总结:

  • 检查每一个判断里是否调用了callback函数
  • 如果判断里发送了请求,一定记得提前引入API

二、表单验证 async-validator: ['xxx is not a string']

题:

在方法校验的时候,会有一部分非 String 类型表单项提示校验未通过,console中显示 async-validator: ["xxx is not a string"]。

解决:

  • 去掉 :rules 规则中的 trigger 属性即可;
  • 如果是验证数字格式的,就设为type: 'number’。如:
Money: { rules: [{ required: true, type: 'number', message: '请输入金额!', trigger: 'change' }] },

GitHub 加速计划 / vu / vue
207.54 K
33.66 K
下载
vuejs/vue: 是一个用于构建用户界面的 JavaScript 框架,具有简洁的语法和丰富的组件库,可以用于开发单页面应用程序和多页面应用程序。
最近提交(Master分支:2 个月前 )
73486cb5 * chore: fix link broken Signed-off-by: snoppy <michaleli@foxmail.com> * Update packages/template-compiler/README.md [skip ci] --------- Signed-off-by: snoppy <michaleli@foxmail.com> Co-authored-by: Eduardo San Martin Morote <posva@users.noreply.github.com> 4 个月前
e428d891 Updated Browser Compatibility reference. The previous currently returns HTTP 404. 5 个月前
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐