EDIT2:
我觉得我接近解决方案。根据vicgoyso的建议,我从输入(而不是数组)创建了一些对象,然后我对它们进行了比较:see the jsfiddle
由于此比较正常:comparison on jsfiddle我希望上面的代码能够正常工作,但事实并非如此。
修改 我正在研究的jQuery方法与此类似:
$().ready(function(){
$.validator.addMethod("same_names", function(value, element) {
if (!$('#surname').val() || $('#surname').val() != null
&& !$('#surname1').val() || $('#surname1').val() != null){
return $('#name').val() != $('#name1').val()
&& $('#surname').val() != $('#surname1').val()
&& $('#nickname').val() != $('#nickname1').val()
}
}, " Your input is equal to another");
$("#myForm").validate({
rules: {
name: {
required: false,
same_names: true
},
name1: {
required: false,
same_names: true
},
surname: {
required: false,
same_names: true
},
surname1: {
required: false,
same_names: true
},
nickname: {
required: false,
same_names: true
},
nickname1: {
required: false,
same_names: true
},
},
messages: {
...
}
})
});
它继续说名字,姓氏和昵称是必需的,但它们不是。 没有jQuery我的方法类似于:
$('#myForm').submit(function (event) {
var errors = false;
if ($('#name').val() == $('#name1').val() &&
$('#surname').val() == $('#surname1').val() &&
$('#nickname').val() == $('#nickname1').val()
||
$('#name').val() == $('#name2').val() &&
$('#surname').val() == $('#surname2').val() &&
$('#nickname').val() == $('#nickname2').val()
||
$('#name').val() == $('#name3').val() &&
$('#surname').val() == $('#surname3').val() &&
$('#nickname').val() == $('#nickname3').val()
||
$('#name').val() == $('#name4').val() &&
$('#surname').val() == $('#surname4').val() &&
$('#nickname').val() == $('#nickname4').val()
....
||
$('#name').val() == $('#name10').val() &&
$('#surname').val() == $('#surname10').val() &&
$('#nickname').val() == $('#nickname10').val()
||
$('#name1').val() == $('#name2').val() &&
$('#surname1').val() == $('#surname2').val() &&
$('#nickname1').val() == $('#nickname2').val()
||
$('#name1').val() == $('#name3').val() &&
$('#surname1').val() == $('#surname3').val() &&
$('#nickname1').val() == $('#nickname3').val()
.... and so on
) {
$("#error").show();
location.href = "#";
location.href = "#error";
errors = true;
} else {
errors = false;
$("#error").hide();
}
if (errors == true) {
event.preventDefault();
}
});
我的实际jsp与此类似(有10个输入组,由姓名+姓氏+昵称组成):
<form id="myForm" method="post">
<input id="name" name="name" />
<input id="surname" name="surname" />
<input id="nickname" name="nickname" />
<br/ >
<input id="name1" name="name1" />
<input id="surname1" name="surname1" />
<input id="nickname1" name="nickname1" />
<br/>
<input id="name2" name="name2" />
<input id="surname2" name="surname2" />
<input id="nickname2" name="nickname2" />
<br />
<input id="name3" name="name3" />
<input id="surname3" name="surname3" />
<input id="nickname3" name="nickname3" />
<br />
<br />
<input id="submit" type="submit" value="submit" />
</form>
如果这个组中的一个(名字,姓氏,昵称)等于另一个,我想成为一个错误,例如这是一个错误:
但这不是:
问题
如果我想使用此代码该怎么办:
https://stackoverflow.com/a/16965721/4477899
在这里解决这个问题:
Form validate some input must be different from each other
我问,因为我已经在使用jQuery验证,如果字段超过两个组,或者为空(不需要这些字段),之前的方法效果不佳。
答案 0 :(得分:1)
仅关于此部分:
<强> EDIT2 强>:
我觉得我接近解决方案。根据vicgoyso的建议,我从输入(而不是数组)创建了一些对象,然后我对它们进行了比较:see the jsfiddle
由于这种比较是有效的:比较jsfiddle我希望上面的代码能够正常工作,但事实并非如此。
您未能在jsFiddle中包含jQuery本身。
主要是它无论如何都不会起作用,因为你的布尔逻辑是向后。找到匹配项后,您将获得true
。但是,您可以使用return true
方法addMethod()
,因此使用true
告诉您 PASS 验证。要验证失败,您必须 return false
。
return !duplicateFound;
最后,要使字段可选,您需要更多逻辑......
return this.optional(element) || !duplicateFound;
DEMO :https://jsfiddle.net/awb4tcyy/3/
总的来说,随着您使用更多字段组进行扩展,您的代码将变得异常复杂。我建议你利用某种类型的循环算法。祝你好运。
答案 1 :(得分:0)
首先需要定义自定义验证方法: https://jqueryvalidation.org/jQuery.validator.addMethod/
@Ajax
在自定义验证中,获取/存储数组中的输入值: jQuery get values from inputs and create an array
然后检查数组是否有重复项,如果找到重复项则返回true: How can I check if the array of objects have duplicate property values?
然后将自定义验证规则的名称添加到输入验证中,如下所示:
jQuery.validator.addMethod("laxEmail", function(value, element) {
var duplicateFound = false;
//apply input values in array
//check for duplicates
duplicateFound = true; //update variable if duplicate found
return duplicateFound;
}, 'Input values cannot be identical');