Jquery验证一个规则失败不应跳转到另一个规则

Jquery验证一个规则失败不应跳转到另一个规则,jquery,jquery-validate,Jquery,Jquery Validate,我正在使用jquery验证,我必须实现功能,以便在任何规则失败时,表单都不应提交。这项工作做得很好 问题是,如果多个规则失败,则在每个文本框中显示错误消息,则故障将传播到所有规则 我想实现一个功能,如果一条规则失败,它应该停止在那里,只显示该元素的错误消息 <form id="myform"> <label for="firstName">FirstName</label> <input class="left" id="fname" name="f

我正在使用jquery验证,我必须实现功能,以便在任何规则失败时,表单都不应提交。这项工作做得很好

问题是,如果多个规则失败,则在每个文本框中显示错误消息,则故障将传播到所有规则

我想实现一个功能,如果一条规则失败,它应该停止在那里,只显示该元素的错误消息

<form id="myform">
 <label for="firstName">FirstName</label>
 <input class="left" id="fname" name="fname" />
 <br>
 <label for="lastName">LastName</label>
 <input class="left" id="lname" name="lname" />
 <br>
 <label for="fromDate">fromDate</label>
 <input class="left" id="fromDate" name="fromDate" />
 <br>
 <label for="endDate">endDate</label>
 <input class="left" id="endDate" name="endDate" />
 <br>
 <input type="submit" value="Validate!">
 </form>

这是我的问题消息的演示-“此字段是必需的”应该出现一次,即第一个文本框。错误不应传播到其余文本框


如果有人知道我想要什么,请回复。(这是我的演示代码。)

您可以使用自定义错误处理程序,其中您只设置错误列表中找到的第一个错误:

showErrors: function(errorMap, errorList) {
    if (errorList.length) {
       this.errorList = [errorList[0]];
    }

    this.defaultShowErrors();
  }
错误列表需要是一个数组,因此第一个错误被放在定义数组的
[]

总的来说,你会得到:

$("#myform").validate({
  rules: {
    fname: "required",
    lname: "required",
    fromDate: "required",
    endDate: "required"
  },
  showErrors: function(errorMap, errorList) {
    if (errorList.length) {
       this.errorList = [errorList[0]];
    }

    this.defaultShowErrors();
  }
});


现在,如果希望内部验证检查在第一个错误时停止。因此,不仅在视觉上不显示错误,而且在一个字段出错时实际上停止检查。您可以覆盖内部检查函数
checkForm()

我只需检查元素是否为
true
false
,一旦
false
我知道至少有一个字段为false。因此,我打破了检查循环:

validator.checkForm = function() {
  this.prepareForm();
  for (var i = 0, elements = (this.currentElements = this.elements()); elements[i]; i++) {
    if (!this.check(elements[i]))
      return false;
  }
  return this.valid();
};


现在我想提醒你,我不是这个插件的创建者,所以我不完全知道这个插件是否能正常工作。我建议您编写自己的验证代码,以便完全控制您的操作。

您可以使用自定义错误处理程序,在该程序中,您只需在错误列表中设置第一个找到的错误:

showErrors: function(errorMap, errorList) {
    if (errorList.length) {
       this.errorList = [errorList[0]];
    }

    this.defaultShowErrors();
  }
错误列表需要是一个数组,因此第一个错误被放在定义数组的
[]

总的来说,你会得到:

$("#myform").validate({
  rules: {
    fname: "required",
    lname: "required",
    fromDate: "required",
    endDate: "required"
  },
  showErrors: function(errorMap, errorList) {
    if (errorList.length) {
       this.errorList = [errorList[0]];
    }

    this.defaultShowErrors();
  }
});


现在,如果希望内部验证检查在第一个错误时停止。因此,不仅在视觉上不显示错误,而且在一个字段出错时实际上停止检查。您可以覆盖内部检查函数
checkForm()

我只需检查元素是否为
true
false
,一旦
false
我知道至少有一个字段为false。因此,我打破了检查循环:

validator.checkForm = function() {
  this.prepareForm();
  for (var i = 0, elements = (this.currentElements = this.elements()); elements[i]; i++) {
    if (!this.check(elements[i]))
      return false;
  }
  return this.valid();
};


现在我想提醒你,我不是这个插件的创建者,所以我不完全知道这个插件是否能正常工作。我建议您编写自己的验证代码,以便完全控制您的操作。

规则在哪里。您必须在此处复制您的或psuedo代码。@可以找到演示代码和帮助。谢谢,规则是这样的。您必须在此处复制您的或psuedo代码。@可以找到演示代码和帮助。谢谢,我只是在我的真实代码上实现你的答案,这不是我想要的。您的插件正在删除其他错误,但在内部它正在传播到所有错误。@AmanNagarkoti是的,插件在内部是这样工作的。我只是重写代码,这样它就不会显示所有的错误。我将尝试编辑内部代码,但这可能会使其过于复杂。好的,如果您发现可以解释的内容,请告诉我。@AmanNagarkoti我用其他信息更新了我的帖子。希望这就是你想要的行为。我只是在我的真实代码中实现你的答案,这不是我想要的。您的插件正在删除其他错误,但在内部它正在传播到所有错误。@AmanNagarkoti是的,插件在内部是这样工作的。我只是重写代码,这样它就不会显示所有的错误。我将尝试编辑内部代码,但这可能会使其过于复杂。好的,如果您发现可以解释的内容,请告诉我。@AmanNagarkoti我用其他信息更新了我的帖子。希望这就是你想要的行为。