自定义jQueryvalidation.addMethod

我有一个表格,以最小/最大长度为基础validation邮政编码。 我需要为所有国家/地区提供5位数的邮政编号,除非澳大利亚需要为4.以下是我遇到的问题:

$.validator.addMethod( "AusZip", function(value, element) { if ($("#Country").val("Aus") && ("#PostalCode").length < 4)) { return false; } else return true; }, "Australian Zip Code Must Be at least 4 Digits"); 

然后在规则中

 rules: { PostalCode: { required: true, minlength: 5 //for all countries except AUS AusZip: true // for Aus } } 

长度不是要走的路吗?

我假设所有validation规则都必须通过,这意味着如果长度为4,则minlength将始终失败。

此外,你错过了$ before ("#PostalCode").length

此行也设置#Country的值。

 $("#Country").val("Aus") 

您想获得该值, 并将其与"Aus" 进行比较

 $("#Country").val() === "Aus" 

尝试删除minlength ,并更改自定义function。

试试这个:

编辑:更改,以便您有2个validation器。

一个人validation该县是澳大利亚, 并且该值的长度至少为4。

另一个validation该县不是澳大利亚,并且该值的长度至少为5。

 $.validator.addMethod("AusZip", function(value, element) { var isAus = $("#Country").val() === "Aus"; if ( isAus && value.length < 4 ) { return false; } else return true; }, "Australian Zip Code Must Be at least 4 Digits"); $.validator.addMethod("NonAusZip", function(value, element) { var isNotAus = $("#Country").val() !== "Aus"; if ( isNotAus && value.length < 5 ) { return false; } else return true; }, "Zip Code Must Be at least 5 Digits"); $('form').validate({ rules: { PostalCode: { required: true, AusZip: true, NonAusZip: true } } });​ 

或者,如果您不需要基于国家/地区的自定义validation消息,则可以执行以下操作:

 $.validator.addMethod("GlobalZip", function(value, element) { var isAus = $("#Country").val() === "Aus"; if ( ( isAus && value.length < 4 ) || value.length < 5 ) { return false; } else return true; }, "Zip Code is not long enough"); $('form').validate({ rules: { PostalCode: { required: true, GlobalZip: true } } });​