2016-06-27 4 views
1

У меня есть специальный валидатор проверки, который я пишу, который проверяет группу полей для уникальности. Все работает отлично, за исключением того, что, когда я исправляю уникальную ошибку, поле, которое я не изменил, остается ошибочным. Это, конечно, потому, что manageFailingTrigger добавляет onchange только для поля, которое было изменено. Я думаю, если бы я мог понять, как сказать manageFailingTieldger, чтобы проверить группу вместо полевого обмена, который исправит мою проблему, но я не могу понять, как это сделать.Очистить ошибку зависимого поля в петрушке 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

Петрушка нет (пока) дело очень хорошо взаимозависимых поля. Самый простой способ справиться с этим. IMO заключается в том, чтобы заключить ваш inputs в div и добавить подтверждение на это div (см. this example). Валидация может добавить/удалить «дублированный» класс для дубликатов.

В противном случае вы можете вызвать событие 'input' или позвонить по номеру validate() на другие поля, которые вы хотите обновить.

+0

Вы не могли бы смотреть на мой предполагаемый ответ и увидеть, если вы видите какие-либо проблемы с этим? –

 Смежные вопросы

  • Нет связанных вопросов^_^