jQuery Validation插件的minlength不起作用

时间:2013-03-10 13:05:41

标签: jquery jquery-validate

我必须根据条件使用最小长度。(无论如何,我尝试了它也没有用)

“必需”规则没有问题。如果条件合适,我可以看到所需的消息,“必需”规则按预期工作,我也可以在控制台中看到“快乐的一天”。

但即使我在控制台中看到“min length 5”,它的表现就像表格一样。

我哪里错了?感谢。

if($('form#form_validation_reg_generate_user').valid({


                                        rules: {

                                            'userPassword':{
                                                required:(function () {
                                                    if($('#userPassword').val().length >0 ) {
                                                        console.log('happy day');
                                                        return true;
                                                    }
                                                    else{
                                                        console.log('happy day false');
                                                        return false;
                                                    }
                                                    })(),
                                                minlength:(function () {
                                                    if($('#userPassword').val().length >0 ) {
                                                        console.log('min length 5');
                                                        return 5;

                                                    }
                                                    else{
                                                        console.log('min length 0');
                                                        return 0;
                                                    }
                                                    })()          

                                            }

                                        }

                                    }))

1 个答案:

答案 0 :(得分:0)

你的代码错了:

if ($('form#form_validation_reg_generate_user').valid({
    // your rules
}));

您正在将.valid().validate()混在一起。您不应在.valid()内声明任何内容,也不能将.validate()置于条件内。

.validate() is called once to initialize the plugin on the form。它不是按需触发验证的方法。初始化后,表单将根据插件中内置的各种事件回调自动进行验证,例如submitonkeyuponfocusout和select,button&复选框click

要以编程方式执行验证测试,您可以调用the built-in .valid() method,这与submit事件非常相似,因为它会在整个表单上触发验证测试表单将显示任何错误。 .valid()还会返回一个布尔值truefalse,指示表单是否通过了验证测试。在您的示例/案例中,您似乎不需要使用此方法。


您的规则代码不合逻辑:

required: (function () {
    if ($('#userPassword').val().length > 0) {
        return true;
    } else {
        return false;
    }
},
minlength: (function () {
    if ($('#userPassword').val().length > 0) {
        return 5;
    } else {
        return 0;
    }
}

你的规则的逻辑完全没有意义,这些功能导致插件窒息。第一条规则是,只有当userPassword包含某些内容时,required才是userPassword。这在逻辑上与“可选”相同。你的第二条规则是,minlength的{​​{1}}只有在userPassword包含某些内容时才会5 ...再次说明没有任何意义。如果该字段是可选的,那么您只需声明userPassword,默认情况下,它仅适用于字段包含的内容。 (您没有显示HTML,因此我只假设minlength是同一字段的userPasswordname。)

请改为尝试:

id

DEMO:http://jsfiddle.net/7jLnu/

否则,如果您还想要字段$(document).ready(function () { $('form#form_validation_reg_generate_user').validate({ rules: { userPassword: { minlength: 5 } }, submitHandler: function (form) { // for demo alert('valid form submission'); // for demo return false; //form demo } }); });

required

http://jsfiddle.net/qZzZ6/