我在使用验证器插件完全验证我的数据时遇到了一些问题 我有2个领域; fieldOne和fieldTwo。然后我有2个PHP文件,process.php和processfailed.php。
现在我有很多条件。
如果fieldOne和fieldTwo都是空的,我希望错误显示给用户但没有调用PHP文件。
如果其中一个字段有有效数据,而另一个字段有无效数据或为空,我希望它调用process.php(我不希望发生验证错误事件)。
只有当两个字段都有无效数据时,才能从验证错误事件中调用processfailed.php。
我到目前为止的代码是这个(删除了一些部分以缩短它)
var validator = $("#my_form").validate({
rules: {
fieldOne: {
require_from_group: [1, '.datagroup'],
maxlength: 40
},
fieldTwo: {
require_from_group: [1, '.datagroup'],
minlength: 8
}
},
groups: {
datagroup: "fieldOne fieldTwo"
},
submitHandler: function (form) {
$.ajax({
type: "POST",
url: "process.php",
data: {
'fieldOne': $("#fieldOne").val(),
'fieldTwo': $("#fieldTwo").val()
}
})
return false;
},
invalidHandler: function (form, validator) {
/* Submit the form even if validation fails: */
$.ajax({
type: "POST",
url: "processfailed.php",
data: {
'fieldOne': $("#fieldOne").val(),
'fieldTwo': $("#fieldTwo").val()
}
})
return false;
}
});
关于它们都是空的,此刻它向用户显示错误,但它似乎也调用processfailed.php(我不希望在这种情况下调用任何php文件)。
如果我将有效数据提供给一个字段并将另一个字段留空,这似乎有效。
如果我将有效数据提供给一个字段并将无效数据提供给另一个字段,那么当它应该调用process.php时,这似乎调用processfailed.php(只要一个字段有效即可)。
如果我向两个字段提供无效数据(它们都验证失败),似乎应该调用processfailed.php。
那么如何处理两个字段为空(不调用任何php文件),如果一个字段有效而另一个字段无效则调用process.php而不是processfailed.php。
任何建议表示赞赏。
答案 0 :(得分:1)
对于两个字段都为空的第一个条件,您只需在invalidHandler
方法中放置一个if语句。
为了在另一个字段有效时不对其中一个字段应用验证,您可以使用规则的depends
属性。
$("#my_form").validate({
rules: {
fieldOne: {
require_from_group: [1, '.datagroup'],
maxlength: {
param: 2,
depends: function(element) {
var valTwo = $('#fieldTwo').val();
return !valTwo || (valTwo.length < 8);
}
}
},
fieldTwo: {
require_from_group: [1, '.datagroup'],
minlength: {
param: 8,
depends: function(element) {
var valOne = $('#fieldOne').val();
return !valOne || (valOne.length > 2);
}
}
}
},
submitHandler: function (form) {
alert("process");
return false;
},
invalidHandler: function (event, validator) {
if ($('#fieldOne').val() || $('#fieldTwo').val()) {
alert('processfailed');
} else {
alert('empty');
}
return false;
}
});
我删除了groups
属性,因为它会导致所有邮件显示在第一个字段旁边,当邮件因为第二个字段违反minlength
规则时,这看起来不正确
注意:invalidHandler
函数的第一个参数是事件对象,而不是表单元素,但您可以使用event.target
获取表单元素。