2015-05-13 16 views
3

我正在使用jQuery驗證插件,並想出了一個場景,我需要創建一個遠程驗證規則。Jquery驗證遠程規則,並取決於輸入值是否改變

說我有一個成員表格,用戶可以編輯他們的個人資料,其中包含他們的電子郵件地址和從數據庫填充的其他信息。很明顯,我會檢查使用遠程方法來檢查電子郵件在註冊時不存在。問題在於,當用戶不想更新他們的電子郵件地址,但是在保存表單時,驗證會大吵大鬧,說電子郵件已經存在。

有沒有一種方法可以在電子郵件地址在窗體中被更改時調用遠程方法。如果電子郵件保持不變,則不需要驗證。

這裏是別的東西工作的遠程方法的一個例子:

rules: { 
    something: { 
     required: true, 
     remote: { 
      param: { 
       url: '/path/to/file.php', 
       type: 'post', 
       data: { 
        'test': $('#something').val() 
       } 
      }, 
      depends: function() { 
       return $('body').hasClass('someClass'); 
      } 
     } 
    } 

我本來以爲我可以把一些檢查的依賴,檢查了更改規則的一部分,但我不噸知道我會怎麼做

+0

您可以將舊電子郵件地址存儲在隱藏字段中,並在驗證服務器端與文本框中的電子郵件進行比較。 – Dhwani

回答

0

保存您的電子郵件進行比較後初始化驗證全局變量,並比較它在depends與當前值。

3
  1. 的隱藏字段從數據庫添加到您的形式,並設置其value原來的電子郵件地址時,加載頁面。也給它一個id供以後參考。 (注意,jQuery驗證插件會忽略所有默認隱藏的領域。它不會被驗證,所以它不需要name屬性。

    <input type="hidden" value="[email protected]" id="originalemail" /> 
    

    您的電子郵件地址輸入文本...

    <input type="text" value="[email protected]" name="emailaddress" /> 
    
  2. 比較隱藏字段的valueemailvalueremote規則的depends選項。

    rules: { 
        emailaddress: { // <- assumes 'name' of field is 'emailaddress' 
         required: true, 
         email: true, // <- make sure data is a valid email address 
         remote: { 
          param: { 
           url: '/path/to/file.php', 
           type: 'post', 
           //data: // < do not need. Value of 'emailaddress' is sent by default. 
          }, 
          depends: function(element) { 
           // compare email address in form to hidden field 
           return ($(element).val() !== $('#originalemail').val()); 
          } 
         } // close remote 
        } // close emailaddress 
    } // close rules 
    

    注意,element參數傳遞到depends函數表示emailaddress領域。

+0

只需添加一個不(!)的依賴返回條件,其作品優秀。 ($(element).val()=== $('#originalemail')。val());' –

+1

@RoyShoa,是的,邏輯是向後的,但'!=='就足夠了。謝謝。 – Sparky