2016-06-27 19 views
1

私は独自のパースリーバリデータを持っています。ユニークなエラーを修正すると、私が変更しなかったフィールドはエラーが残っていることを除いて、すべてがうまく動作します。これはもちろん、manageFailingFieldTriggerが変更されたフィールドに対してのみonchangeを追加するためです。私はmanageFailingFieldTriggerに、フィールドを変更する代わりにグループを検証して問題を解決する方法を理解できればと思いますが、その方法を理解することはできません。パーズリー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

パセリしない(まだ)取引非常によくして相互に依存するフィールド。それを扱う最も簡単な方法は、inputsdivに囲み、それにdivthis example参照)の検証を追加することです。バリデーションは、重複のために「重複」クラスを追加/削除することができます。

それ以外の場合は、'input'イベントをトリガーするか、更新するその他のフィールドにvalidate()を呼び出します。

+0

あなたは私の提案の答えを見て、あなたはそれですべての問題を見たら見て気にしませんか? –

関連する問題