2

我有一個成員管理頁面,客戶希望一個字段始終是必需的,如果用戶是成員,那麼它必須是電子郵件地址。如果該帳戶用於管理員,則不必是電子郵件。我的第一個想法是,「easy。function()就像我在有時需要字段時所做的一樣。」JQuery驗證插件在某些情況下需要電子郵件

我正在使用JQuery驗證插件。這是有問題的路線。

ename: { required: true, email: function() { var retVal = ($("#mem_rights").val() == 4); alert(retVal); return retVal; }}, 

警報是調試代碼,它表明函數正在計算正確。當我在管理頁面上時,它的計算結果爲false,但如果將該值設置爲非電子郵件地址,我仍然會在輸入框旁邊顯示錯誤消息「請輸入有效的電子郵件地址」。

我需要做什麼?

回答

1

不幸的是,沒有規則,但required默認情況下需要依賴函數或表達式。

這裏有一種方法,你可以通過覆蓋默認的email規則(或者添加一個帶有你自己選擇的名稱的規則)來實現它,以便它具有依賴函數。

var oldEmail = $.validator.methods.email; 

$.validator.addMethod("email", function(value, element, param) { 
    return !param || oldEmail.call(this, value, element); 
}); 

$("#test").validate({ 
    rules: { 
     field: { 
      required: true, 
      email: { 
       depends: function() { 
        return $("#require-email").is(":checked"); 
       } 
      } 
     } 
    } 
}); 

例子:http://jsfiddle.net/rvsDs/

如果你感到緊張覆蓋默認email規則(有效的關注),你可以只命名新規則conditionalemail或類似的東西。

+0

我確實改變了自定義方法的名稱,但是它做到了。然後我只是添加了一條消息。完善! – 2011-12-23 17:58:48

0

根據文檔,required屬性也可以是dependency expressiondependency callback,您可以使用該屬性來執行條件需求。你也許可以寫這樣的事:

ename: { 
    required: function(el) { 
    return $("#mem_rights").val() == 4; 
    } 
} 

雖然當值沒有改變,沒有必要的功能,只是評估像這樣的表達式:

ename: { required: ($("#mem_rights").val() == 4) } 
+0

這不是導致問題的必需部分。這是電子郵件部分。 – 2011-12-23 17:24:23

相關問題