我正在制作一个具有以下验证规则的表单:没有字段是“必需”,但是如果您输入电子邮件,它必须是有效的,如果您输入密码,它必须至少为6个字符,匹配确认密码字段值。
表单完美无缺,没有验证,所以我知道它不是PHP或HTML问题。
这是处理表单的jQuery代码:
更新代码
$('#success').hide();
$('#pwerror').hide();
$('#emailError').hide();
$('#subSet').live('click',function() {
//if any of the fields have a value
if($("#chfn").val() != "" || $("#chln").val() != "" || $("#chpw").val() != "" || $("#chpw2").val() != "" || $("#chem").val() != "" || $("#chDefZone").val() != "Select Zone")
{
$ev = 1;
$pv = 1;
$("#profSet").validate({
rules: {
chem: {
email: true
},
chpw: {
minlength: 6
},
chpw2: {
minlength: 6,
equalTo: "#chpw"
}
},
messages:{
chpw2: {
equalTo: "Passwords must be the same."
},
chpw: {
minlength: "Password must be at least 6 characters."
}
}
});
//validates an email if there is one, trips the valid variable flag
if($("#chem").val() != "")
{
if(!($("#profSet").valid()))
{
$ev = 0;
}
}
//if either password field is filled, start trying to validate it
if($("#chpw").val() != "" || $("#chpw2").val() != "")
{
if(!($("#profSet").valid()))
{
$pv = 0;
}
}
//if those two were valid
if($pv == 1 && $ev == 1)
{
$.post('php/profSet.php', $('#profSet').serialize(), function(){
$('#profSet').hide();
$('#success').show();
});
}
//if either was invalid, the error was already tripped, and this code exits here
}
});
现在的问题是其中一个无效标志被绊倒了,但我找不到哪个地方,表格应该在我的测试中返回有效。
答案 0 :(得分:3)
equalTo
采用选择器,而不是值。
更改...
equalTo: $("#chpw").val()
...到...
equalTo: "#chpw"
......你很高兴。
顺便说一句,在验证之前,您不需要明确检查电子邮件(或任何其他字段)是否为空。只是不要包含required: true
。然后它应该仅在值存在时验证它。