2016-04-19 108 views
0

我有一個表單,其中必填字段取決於另一個表單字段值。所以所需的規則可能是真或假取決於其他領域。如果只有要求是真的,那麼問題是接受規則應該在那裏。我怎樣才能做到這一點?JQuery驗證規則依賴於另一個規則

..., 
fieldA: { 
    maxlength: 3, 
    accept: "[0-9]{3}", 
    required: function() { 
      if($('#fieldB').val() == 'ABCD') { 
       return false; 
      } else { 
       return true; 
      } 
    } 
},... 

在此先感謝。

+0

你寫的代碼有什麼問題?它似乎在https://jqueryvalidation.org/required-method – Barmar

+0

上實現了'dependency-callback'功能。它類似於那裏的例子,如果年齡<13,則需要父項。 – Barmar

+0

@Barmar我當前的代碼的問題是接受規則在需要時應用是錯誤的。我希望接受規則只在需要時爲真 –

回答

1

我沒有意識到'接受'規則是一種自定義規則。我編輯了代碼來檢查它是否爲可選字段。 this.optional(元素)

jQuery.validator.addMethod("accept", function(value, element, param) { 
    return this.optional(element) || value.match(new RegExp("^" + param + "$")); 
}); 

@Barmar感謝您的幫助。

+0

這是正確的解決方案。編寫自定義規則的一般模式應該總是包含一個'this.optional'檢查。請參閱http://stackoverflow.com/questions/3526236/jquery-validator-plug-in-validate-optional-field以及所有示例,網址爲https://jqueryvalidation.org/jQuery.validator.addMethod/ – Barmar

0

不幸的是,您的required函數很可能只會在表單呈現時被調用,並且不會在獨立字段更改時更新相關字段。你可以使用dymanic的ui庫,比如react或knockout,或者你可以簡單地將.change()處理程序綁定到獨立的字段來操縱另一個的屬性。

如果配置不正確,您也可以將某些內容綁定到.submit(),以防止提交。

+0

依賴性回調應該在驗證時運行,而不是在表單呈現時運行。 – Barmar