0

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

$("#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”,它就可以工作。

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

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

我的代码有什么问题。请帮助我。提前致谢

4

5 回答 5

1

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

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

你所拥有$('#isSocialSignup').val() == 'true' || $('#isSocialSignup').val() == true的那个,你与布尔值比较的第二部分,true总是.val()会告诉你它true是否有任何东西,包括单词"false"。所以这可能对你没有帮助!

除此之外,您的代码对我来说看起来不错。太多的尾随逗号,这会让 IE 用户感到不安:

"gender": {
   required: true, //<---- that comma will cause an issue
}, //<--- this one won't because there is something after it

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

于 2013-11-06T17:13:00.980 回答
1

引用 OP 的评论

“...萤火虫控制台中的错误$.validate.method[method] is undefined

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

问题很简单……没有这样的方法叫做minLength.

该方法称为minlength=> 注意小写字母l代替大写字母L

见:http: //jqueryvalidation.org/minlength-method/

于 2013-11-06T19:45:14.297 回答
0

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

required: {
            depends: function(element) {
                return $("#isSocialSignup").val() == "true" || $("#isSocialSignup").val() == true
            }
        }
于 2013-11-06T11:48:36.097 回答
0

试试这个

rules : {
            "firstName" : {
                required : true,
            },
            "lastName" : {
                required : true,
            },
            "gender" : {
                required : true,
            },
            "password" : {
                required: $("#isSocialSignup").val() == 'true' ? true : false,
                minLength : 6
            }
        },
于 2013-11-06T11:50:57.520 回答
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();
    }
});
于 2013-11-06T12:31:54.773 回答