2014-12-05 75 views
2

Github上的「jackrugile」提問這個問題,但如果發現問題,我找不到答案。我在這裏重新發布,因爲具有完全相同的問題:驗證Parsley.js中的鏈接字段

當使用鏈接到其他字段(等於,大於,小於,日期之前,日期之後等)的驗證約束時,無論觸發驗證在一個字段上的調用應該自動地在另一個字段上調用。這隻適用於提交以外的觸發器(focusin,focusout,keydown,keyup等)

例如,如果我有一個名爲「Small Number」的字段和一個名爲「Large Number」的字段,我會將data-greaterthan屬性添加到「大數」輸入以確保它較大。然後我填寫該字段,如下所示:

Small Number: 12 
Large Number: 7 

此驗證明顯失敗,並在「大號」字段顯示錯誤。然後,要解決的不是使「大量的」這個錯誤,大於12,我做了「少量多次」的小於7的形式的狀態現在是:

Small Number: 5 
Large Number: 7 

然而,即使這應該立即通過,因爲它在驗證規則中,因爲在更改「小號」後再次在「大號」上不執行檢查,所以它不會刪除錯誤。

這是最好的解決方案是什麼?

回答

1

據我所知,在Parsley 2.1(當前版本),這不支持。但是,我們可以通過偵聽已啓動的parsley events來添加功能。我認爲有很多方法可以解決這個問題。我選擇了在現場初始化時做到這一點。當一個字段被初始化時,如果它有一個依賴於另一個字段的驗證器,我會向該字段添加一個偵聽器,以便當該字段更改時,我重新執行驗證。這裏有一個例子:

/** 
    * For fields that have a comparison to another field, 
    * setup a listener so that when one field changes, both 
    * fields re-validate. 
    */ 
$.listen('parsley:field:init', function(e) { 
    var comparisonFields = ['gte', 'gt', 'lte', 'lt']; 
    for (var i = 0; i < comparisonFields.length; i++) { 
    if (e.OptionsFactory.fieldOptions[comparisonFields[i]]) { 
     $(e.OptionsFactory.fieldOptions[comparisonFields[i]]).on(e.OptionsFactory.staticOptions.trigger, function() { 
      $(e.$element).parsley().validate(); 
     }) 
    } 
    } 
}); 

需要注意的是,如果你在任何初始化事件添加監聽器,代碼必須拿出你初始化香菜形式之前。

-1

此功能在Parsley zip文件中的extra驗證中提供。

+0

這不回答這個問題。這個問題特別是關於雙向約束,這個Parsley的額外功能目前似乎不支持。在他的問題中看到他的例子。 – Brad 2015-07-14 17:14:16