自定义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 } } });