使用条件的jquery验证插件

时间:2013-11-06 11:43:06

标签: jquery jquery-validate

我正在使用验证插件来验证表单,这是我的规则

$("#creatProfileForm").validate({
    ignore: [], //use for hidden fields validation, by default hidden fields are ignored
    rules : {
        "firstName" : {
            required : true,
        },
        "lastName" : {
            required : true,
        },
        "gender" : {
            required : true,
        },
        "password" : {
            required : function(element) {
                if($("#isSocialSignup").val() == "true" || $("#isSocialSignup").val() == true)
                    return true;
            },
            minLength : 6
        }
    },
        messages : {
            "firstName" : {
                required : 'First Name is required',
            },
            "lastName" : {
                required: "Last Name is required",
            },
            "gender" : {
                required : "Gender is required",
            },
            "password" : {
                required : "Password is required",
                minLength : "Lenght should be atleast 6 characters"
            }
        },
        errorPlacement: function(error, element) { //custom location for error placement
            if (element.attr("name") == "gender") {
              error.insertAfter(".temp");
            } else {
              error.insertAfter(element);
            }
          } 
});

更新:如果我删除了回调函数并添加“required:true”,它就可以了。

我的问题是密码字段,我在视图中存储了一个布尔值,并使用该值我决定密码字段所需。如果value为true,则需要密码,否则不需要。

当我提交表单时,在控制台上我会打印“false”,但仍然会在密码字段中显示消息,"password is required"

我的代码出了什么问题。请帮助我。 提前谢谢

5 个答案:

答案 0 :(得分:1)

我认为你的问题很简单就是没有minLength这样的方法。你可能意味着minlength。正如@rubyist建议的那样,您需要将所需的依赖项更改为:

required: $("#isSocialSignup").val() == 'true' ? true : false,

您使用$('#isSocialSignup').val() == 'true' || $('#isSocialSignup').val() == true的那个,与布尔true进行比较的第二部分,.val()将始终告诉您true是否有"false"任何内容,包括单词"gender": { required: true, //<---- that comma will cause an issue }, //<--- this one won't because there is something after it 。所以这可能没有帮助你!

除此之外,你的代码看起来很好。太多的尾随逗号,会让IE用户感到不安:

{{1}}

半相似的工作示例:http://jsfiddle.net/ryleyb/D59ZW/

答案 1 :(得分:1)

引用OP的评论

  

“... firebug console $.validate.method[method] is undefined中的错误”

  

“...与required:false,它会给出相同的错误($.validate.method[method] is undefined)并提交表单。”

问题很简单......没有一种名为minLength的方法。

该方法称为minlength =&gt;请注意小写l代替大写L

请参阅:http://jqueryvalidation.org/minlength-method/

答案 2 :(得分:0)

使用依赖选项:http://jqueryvalidation.org/validate/

required: {
            depends: function(element) {
                return $("#isSocialSignup").val() == "true" || $("#isSocialSignup").val() == true
            }
        }

答案 3 :(得分:0)

试试这个

rules : {
            "firstName" : {
                required : true,
            },
            "lastName" : {
                required : true,
            },
            "gender" : {
                required : true,
            },
            "password" : {
                required: $("#isSocialSignup").val() == 'true' ? true : false,
                minLength : 6
            }
        },

答案 4 :(得分:0)

jQuery.validator.setDefaults({
  debug: true,
  success: "valid"
  });
$("#creatProfileForm").validate({
    rules : {
        "firstName" : {
            required : true,
        },
        "lastName" : {
            required : true,
        },
        "gender" : {
            required : true,
        },
        "password" : {
            required: ($("#isSocialSignup").val() == "true" || $("#isSocialSignup").val() == true) ? true : false,
            minLength : 6
        }
    },
        messages : {
            "firstName" : {
                required : 'First Name is required',
            },
            "lastName" : {
                required: "Last Name is required",
            },
            "gender" : {
                required : "Gender is required",
            },
            "password" : {
                required : "Password is required",
                minLength : "Lenght should be atleast 6 characters"
            }
        },
    submitHandler: function(form) {
    form.submit();
    }
});