当前位置: 首页 > 知识库问答 >
问题:

前端 - form表单验证问题,valid打印不出来,然后报错?

施翰学
2025-06-07

form表单验证问题,valid打印不出来

saveDraft(nextFlag) {

  const datas = clone(this.formValidate);
  datas.omitFlag = datas.omitFlag ? 1 : 0;
  datas.irsName =
    datas.projSysList.map((item) => item.name).join(";") || "";
  datas.irsCode =
    datas.projSysList.map((item) => item.code).join(";") || "";

  const params = {
    ...datas,
    id: this.projectId,
    financialSource:
      datas.financialSource === "其他"
        ? this.ruleValidate.financialSource.value
        : datas.financialSource,
    projectCompanyCode:
      this.OrganizationListByName.find(
        (e) => e.organizationName === datas.projectCompany
      )?.organizationCode || "",
    coordinateCompany: datas.coordinateCompanyList
      .map((item) => item.value)
      .join("|"),
    historyProjectName: datas.historyProjectList
      ?.map((item) => item.value)
      .join("|"),
    projectProperty: datas.projectPropertyList.join("|"),
    buildType: datas.buildTypeList.join("|"),
  };
  if (nextFlag) {
    // 返回一个新的 Promise、
    return new Promise((resolve, reject) => {
      
      this.$refs.formValidate.validateField('budgetYear', (valid) => {
        console.log("测试验证结果:", valid);
        if (valid) {
          this.saveFlag = true;
          this.submitloading = true;
          saveProjectInfo(params)
            .then((res) => {
              resolve(res.data);
            })
            .catch((err) => {
              reject(err);
            })
            .finally(() => {
              this.submitloading = false;
            });
        } else {
          // 校验失败时也 resolve 或 reject,根据您的业务逻辑
          reject(new Error("表单校验未通过"));
          // 或者如果您想将校验失败视为正常流程:
          // resolve({ status: "validation_failed" });
        }
      });
    });
  } else {
    // 非 nextFlag 情况保持不变
    this.submitloading = true;
    return new Promise((resolve, reject) => {
      saveProjectInfo(params)
        .then((res) => {
          resolve(res.data);
        })
        .catch((err) => {
          reject(err);
        })
        .finally(() => {
          this.submitloading = false;
        });
    });
  }
},valid的没有值,然后会一直说校验未通过,改成数组就Uncaught (in promise) Error: [iView warn]: must call validateField with valid prop string!不知道该怎么解决了

共有3个答案

庾君博
2025-06-07

已经解决了:
1.有v-if判断,需要先判断是否存在字段。
2.必须是字符串,不能是数组,例如:["name","age"]。

施阎宝
2025-06-07

你的问题在于 validate 方法的用法错误:

  • 正确的 API 应该是:

    • this.$refs.formValidate.validate(callback) - 验证整个表单
    • this.$refs.formValidate.validateField('budgetYear', callback) - 验证单个字段

解决方案

验证整个表单(推荐)

saveDraft(nextFlag) {
  // ... 你的数据处理逻辑 ...

  if (nextFlag) {
    return new Promise((resolve, reject) => {
      // 验证整个表单
      this.$refs.formValidate.validate((valid) => {
        console.log("测试验证结果:", valid);
        if (valid) {
          this.saveFlag = true;
          this.submitloading = true;
          saveProjectInfo(params)
            .then((res) => {
              resolve(res.data);
            })
            .catch((err) => {
              reject(err);
            })
            .finally(() => {
              this.submitloading = false;
            });
        } else {
          reject(new Error("表单校验未通过"));
        }
      });
    });
  } else {
    // ... 非 nextFlag 的逻辑 ...
  }
}
柴兴修
2025-06-07

validate是校验整个表单吧,不支持传入字段名的
如果只校验budgetYear字段,应该有个 validateField 方法吧

this.$refs.formValidate.validateField('budgetYear', (valid) => {
  console.log(valid); // true / false
});
 类似资料:
  • 在构建Web应用程序时,验证是一个重要的过程。 它确保我们获得的数据适当且有效存储或处理。 CodeIgniter使这项任务变得非常简单。 让我们用一个简单的例子来理解这个过程。 例子 (Example) 创建一个视图文件myform.php并将以下代码保存在application/views/myform.php 。 此页面将显示用户可以提交其姓名的表单,我们将验证此页面以确保在提交时不应为空。

  • 为什么我的这个 el-select 没有触发校验? Demo b

  • 问题: 输入内容,失去焦点,应该提示【请输入正确的身份证号码】,也就是走rules的第二条规则partner,而不是走第一条require。 示例代码如下: 在线demo: el-form表单示例 - JS Bin

  • 所以我有这个代码,叫我白痴哈哈,但是我不能让它打印7。 代码: 我需要知道如何改变与函数中的参数同名的变量。 任何帮助都将不胜感激,如果你不明白这个问题,我很乐意解释更多。

  • 本文向大家介绍详解Angular Reactive Form 表单验证,包括了详解Angular Reactive Form 表单验证的使用技巧和注意事项,需要的朋友参考一下 本文我们将介绍 Reactive Form 表单验证的相关知识,具体内容如下: 使用内建的验证规则 动态调整验证规则 自定义验证器 自定义验证器 (支持参数) 跨字段验证 基础知识 内建验证规则 Angular 提供了一些内

  • 本文向大家介绍详解ASP.NET MVC Form表单验证,包括了详解ASP.NET MVC Form表单验证的使用技巧和注意事项,需要的朋友参考一下 一、前言   关于表单验证,已经有不少的文章,相信Web开发人员也都基本写过,最近在一个个人项目中刚好用到,在这里与大家分享一下。本来想从用户注册开始写起,但发现东西比较多,涉及到界面、前端验证、前端加密、后台解密、用户密码Hash、权限验证等等,

  • 自定义了一个表单验证类,但是在django中当我clean_UserName这个方法执行了并抛出异常的时候,其他的验证方法还会继续执行,怎么才能在一个验证方法抛出异常后其他的方法都中止执行呢?