我正在使用jQuery Validation Plugin。我有一个基于1-5创建的动态表单,具体取决于用户为循环选择的数字。我正在努力编写动态部分,以使每个表单字段在每个循环上正常工作。
<!--- Looping Validation --->
<script>
$("#form").validate({
focusCleanup: true,
focusInvalid: false,
rules: {
phoneNumber_<cfoutput>#Add#</cfoutput>: {
required: true,
validatePhone: true
},
},
// Same for other fields
messages: {
phoneNumber_<cfoutput>#Add#</cfoutput>: "This field is required.",
// Repeat for other fields
}
});
所以我尝试创建的第一个例子,规则有效,但只有它循环一次。如果用户选择两个或更高,它只适用于第一个而不是第二个或更高的循环。
// Validates Phone Number
jQuery.validator.addMethod("validatePhone", function(value, element) {
return this.optional(element) || /^(\([0-9]{3}\) |[0-9]{3}-)[0-9]{3}-[0-9]{4}$/.test(value);
}, 'Please enter valid Phone Number.');
然后我尝试了这个,它打破了RegEx,并且只尝试在第一个循环上进行验证。
// Validates Phone Number
jQuery.validator.addMethod("validatePhone", function(phoneNumber_<cfoutput>#Add#</cfoutput>) {
var value = new RegExp("^(\([0-9]{3}\) |[0-9]{3}-)[0-9]{3}-[0-9]{4}$");
return phoneNumber_<cfoutput>#Add#</cfoutput>.match(value);
}, 'Please enter valid Phone Number.');
任何帮助都将非常感谢!!提前谢谢!
答案 0 :(得分:4)
我正在使用jQuery Validation Plugin。我有一个基于1-5创建的动态表单,具体取决于用户为循环选择的数字。我正在努力编写动态部分,以使每个表单字段在每个循环上正常工作。
你到底在说什么“循环”?我看到你的代码没有循环。您无法在同一表单上多次调用.validate()
方法。您只需在表单上调用.validate()
方法一次即可初始化该插件。 忽略所有后续调用。表单数据的实际验证将根据插件自动捕获的事件自动 。不需要循环,这里完全没用。
如果您需要将规则声明为动态创建的字段元素,则可以在创建新字段后立即调用the .rules()
method,并在.validate()
之后随时调用。{/ p>
定位“以”phoneNumber_
开始的所有字段...
$('input[name^="phoneNumber_"]').each(function() {
$(this).rules('add', {
required: true,
validatePhone: true,
messages: { // optional
required: "custom message for required",
validatePhone: "custom message for validatePhone"
}
});
});