現在、jQuery 検証プラグインを使用して、サイト内で使用されているフォームを検証しています。ただし、複数のフォームの可能性があり、特定のクラスを持つ div 内のすべてのフォームをターゲットにすることになっているすべての検証スクリプトに適合する 1 つのサイズを使用しています。
現在、私の検証は次のとおりです。
$(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 という名前の要素がないため、検証スクリプトは起動されません。なぜこれがこれをしているのか、私は本当に途方に暮れています。
サイト全体に存在しないダミー クラスを使用してみましたが、それでも検証が実行されているようです。どんな助けでも大歓迎です。