2012-09-10 109 views
1

我有一個窗體有2個文本輸入和2個單選按鈕。 一個單選按鈕是客戶希望通過紙質郵件發送所有未來通信時的另一個按鈕,當客戶想要通過電子郵件進行通信時。jQuery驗證引擎需要阻止我的自定義所需的驗證器

當用戶選擇電子郵件時,用戶需要用他的電子郵件地址填寫其中一個輸入文本框。當用戶選擇郵政時,他必須用郵政地址填寫另一個郵箱。

我對此有一個自定義的jQuery驗證引擎功能:

function checkBillRoutePostalAddressConflict(field, rules, i, options){ 
    var fieldValue = field.val(); 
    var accountIdR = field.attr('id').match(/\d+$/); 
    var radioButton = jQuery('#postalBillsDestination_' + accountIdR); 
    if(!fieldValue && radioButton.attr("checked")){ 
    alert('options.allrules.checkBillRoutePostalAddressConflict.alertText') // for debugging 
    return options.allrules.checkBillRoutePostalAddressConflict.alertText; 
    } 
} 

驗證中加入類我輸入文本字段class="validate[funcCall[checkBillRoutePostalAddressConflict]]"

問題是,它不工作。調試警報消息顯示這意味着條件是正確的。如果我將其替換爲其他自定義驗證器之一,則一切正常。

有人告訴我,如果你寫一個自定義驗證函數給一個空的字段,並且不應該那麼消息不會顯示,因爲jQuery希望你使用validate [required]。

如果這是真的,有沒有人知道某種不太過於hacky的解決方法?

一個選項是直接使用showPrompt,但mabye有更清潔更好的東西嗎?
謝謝!

回答

0

元素的規則不僅可以是真或假,也可以是函數。如果電子郵件複選框被選中該功能可以檢查並返回true(否則返回false):

$('#form').validate({ 
    'rules': { 
     'email_text_field': { 
      'required': function() { return $('#email-radio').is(':checked'); } 
     } 
    }   
}); 

這裏默認required驗證器使用。