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