我目前正在使用 jQuery 验证插件来验证我网站中使用的表单。但是,有多种形式的可能性,我正在使用一种适合所有验证脚本,该脚本应该针对具有特定类的 div 中的所有表单。
目前我的验证如下:
$(document).ready(function(){
jQuery.validator.addClassRules({
isemail: {
required: true,
email: true
}
});
jQuery.validator.addMethod("ContainsAtLeastOneDigit", function (value) { return /[a-z].*[0-9]|[0-9].*[a-z]/i.test(value); }, 'Your password must contain at least 1 number');
$(".icams_inserted form").validate({
errorClass : "invalid",
validClass : "valid",
showErrors: function(errorMap, errorList) {
var err = this.numberOfInvalids();
if (err > 1) {
var word = "errors";
var field = "fields";
$("#error_message").html("The form contains " + this.numberOfInvalids() +" "+ word + ". Please correct the highlighted " + field + " below."); this.defaultShowErrors();
}else{
var word = "error";
var field ="field";
if (err < 1) {
$("#error_message").html("");
this.defaultShowErrors();
}else{
$("#error_message").html("The form contains " + this.numberOfInvalids() +" "+ word + ". Please correct the highlighted " + field + " below."); this.defaultShowErrors();
}
}
},
submitHandler: function(form){
/*For the registration form, move the email address the user has entered into the hidden email field*/
if (form.hasClass('prefs')) {
var mail = $('#p_username').val();
$('input[type="hidden"][name="p_email_address"]').val(mail);
}
form.submit();
},
rules : {
p_password:{
minlength: 8,
ContainsAtLeastOneDigit: true
},
p_password_conf:{
equalTo: p_password,
minlength: 8,
ContainsAtLeastOneDigit: true
}
},
messages:{
p_password_conf:{
equalTo: 'The passwords entered do not match'
}
}
});
})
但是,出于某种原因,验证似乎会在每个页面上启动,即使是没有任何表单的页面。这会在 Firebug 中产生以下错误:
ReferenceError: p_password is not defined
equalTo: p_password,
有人知道为什么吗?我的理解是,插件应该只触发它所针对的元素,在这种情况下,表单包含在具有 .icams_inserted 类的元素中,但情况似乎并非如此。我的理解也是,只有在找到相关元素时才应进行验证。在这种情况下,页面上没有名称为 p_password 的元素,因此不应触发验证脚本。我真的不知道为什么会这样做。
我什至尝试过使用整个站点中不存在的虚拟类,但无论如何验证似乎仍在触发。任何帮助将不胜感激。