jQuery表单验证有问题

时间:2011-03-13 00:05:05

标签: jquery validation forms

我正在制作一个具有以下验证规则的表单:没有字段是“必需”,但是如果您输入电子邮件,它必须是有效的,如果您输入密码,它必须至少为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
        }
    });

现在的问题是其中一个无效标志被绊倒了,但我找不到哪个地方,表格应该在我的测试中返回有效。

1 个答案:

答案 0 :(得分:3)

equalTo采用选择器,而不是值。

更改...

equalTo: $("#chpw").val()

...到...

equalTo: "#chpw"

......你很高兴。

更新

顺便说一句,在验证之前,您不需要明确检查电子邮件(或任何其他字段)是否为空。只是不要包含required: true。然后它应该仅在值存在时验证它。