2013-10-31 23 views
0

我目前使用jQuery validate插件來驗證我的網站中使用的表單。但是,有多種形式的可能性,我使用的是一種適用於所有驗證腳本的應用程序,它應該針對具有特定類的div中的所有表單。無論表單是否存在,jQuery Validate函數都會觸發

目前我的驗證如下:

$(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的元素,因此驗證腳本不應觸發。我真的不知道爲什麼這樣做。

我甚至嘗試過使用不存在於我的整個站點中的虛擬類,它似乎仍然認爲無論是驗證都會觸發。任何幫助將不勝感激。

+0

請顯示演示您的問題的相關HTML標記。 – Sparky

回答

1

修訂:

你的錯誤...

ReferenceError: p_password is not defined 
equalTo: p_password, 

......如上述提及的,是由您的不正確規則的聲明引起...

equalTo: p_password // <-- missing quotes 

必須是這樣的...

equalTo: "#p_password" // <-- targeted by id in this example 

As per docs,該equalTo值是其他領域的「選擇」,它的用引號括起來。

編輯:通過jsFiddle,我能夠看到equalTo規則工作,即使沒有報價周圍的價值。

當頁面加載時,.validate()調用中的代碼正在被解析,並且只要p_password字段不存在就會觸發錯誤。 「驗證」不會觸發。



原文如下:


報價問題標題

「的每一頁上jQuery驗證功能火災不管是否存在形式」

「驗證」未觸發。 .validate()調用是該插件的初始化方法


報價OP

「驗證好像踢的每一頁上,即使是沒有任何形式的網頁。」

除非有附加表格觸發的事件,否則「驗證」不起作用。當您只需將.validate()附加到表單上時,您只需初始化該表單上的插件即可。

$('#myform').validate()≠ 「驗證」

但是,窗體上的驗證插件的

$('#myform').validate() = 初始化id="myform"


報價OP的評論

「錯了。這裏的文件明確指出,這種方式只能驗證指定的形式調用驗證。」

是,‘確認’時,纔會發生指定的形式。但是,調用.validate()一樣「驗證在踢。」調用.validate()方法只是什麼初始化的驗證插件

的「驗證」將只通過該插件捕獲的事件,如「鍵向上」的一個觸發。 ,「模糊」或「點擊」的提交按鈕「。 「驗證」將而不是通過簡單加載頁面發生......除非您通過編程方式通過測試方法觸發它,例如.valid()

+0

錯了。文檔中明確指出,以這種方式調用驗證應僅驗證指定的表單。http://jqueryvalidation.org/validate/ – jezzipin

+0

@jezzpin,並且你的頁面上沒有任何表單!您如何期望在不存在的表單上初始化插件? – Sparky

+0

你怎麼知道我的網頁是什麼樣的?我甚至沒有鏈接。我的表單位於.icams_inserted div內。我直接針對表單元素,這意味着這個div中的任何表單都會被驗證。 – jezzipin