2016-06-27 62 views
1

我有一個自定義歐芹字符驗證程序,用於檢查一組字段是否唯一。一切都很好,除了當我修復一個獨特的錯誤時,我沒有改變的領域仍然存在錯誤。這當然是因爲manageFailingFieldTrigger僅爲已更改的字段添加了onchange。我想如果我能弄清楚如何告訴manageFailingFieldTrigger驗證一個組而不是一個字段onchange來解決我的問題,但我無法弄清楚如何做到這一點。清除歐芹js中的相關字段錯誤

window.Parsley.addValidator('unique', function (value, requirement) { 
     console.debug("Validating: " + value + "\nrequirement: " + requirement); 
     console.debug($(requirement + '[value="' + value + '"]')); 
     var matches = 0; 
     $(requirement).each(function(i, val) { 
      if ($(this).val() == value) { 
      matches++; 
      } 
     }); 
     if(matches > 1) return false; 
     return true; 
    }) 
     .addMessage('en', 'unique', 'This value must be unique'); 

HTML(外來的東西很多的刪除):

<form id="upload_form" method="POST" action="/school/student/upload_finish" data-parsley-validate> 
      <input type="text" name="data-0-1" class="column-1" value="[email protected]" data-parsley-group="column-1" data-parsley-unique=".column-1"/> 
      <input type="text" name="data-1-1" class="column-1" value="[email protected]" data-parsley-group="column-1" data-parsley-unique=".column-1"/> 
      <input type="text" name="data-2-1" class="column-1" value="[email protected]" data-parsley-group="column-1" data-parsley-unique=".column-1"/> 
      <input type="text" name="data-3-1" class="column-1" value="[email protected]" data-parsley-group="column-1" data-parsley-unique=".column-1"/> 
      <input type="text" name="data-4-1" class="column-1" value="[email protected]" data-parsley-group="column-1" data-parsley-unique=".column-1"/> 
      <input type="text" name="data-5-1" class="column-1" value="[email protected]" data-parsley-group="column-1" data-parsley-unique=".column-1"/> 
      <input type="text" name="data-6-1" class="column-1" value="[email protected]" data-parsley-group="column-1" data-parsley-unique=".column-1"/> 
</form> 

回答

0

這似乎完成我想要的東西:

window.Parsley.addValidator('unique', function (value, requirement) { 
    var matches = 0; 
    $(requirement).each(function(i, val) { 
     if ($(this).val() == value) { 
     matches++; 
     } 
    }); 
    if(matches > 1) return false; 
    return true; 
}) 
    .addMessage('en', 'unique', 'This value must be unique'); 

window.Parsley.on('field:success', function() { 
    // In here, `this` is the parlsey instance of #some-input 
    //Ugly hack 
    if("unique" in this.constraintsByName) 
    { 
     for(var field in this.parent.fields) 
     { 
      var fieldInstance = this.parent.fields[field]; 
      if(fieldInstance.$element.hasClass(this.constraintsByName["unique"].requirements.substring(1)) && fieldInstance.$element.hasClass('parsley-error')) 
      { 
       fieldInstance.validate(); 
      } 
     } 
    } 
}); 
0

香菜不(還)處理得很好,相互依存的領域。處理它的最簡單方法是將inputs放入div,並將驗證添加到div(請參閱this example)。驗證可以爲重複項添加/刪除「重複」類。

否則,您可以觸發'input'事件,或者在要更新的其他字段上調用validate()

+0

你介意看我提出的答案,如果你看到它的任何問題看見了什麼? –