Добавить / удалить правило проверки jQuery на основе запроса Ajax - PullRequest
0 голосов
/ 11 октября 2018

У меня проблема с изменением определенного правила из проверки JQuery на основе запроса Get Ajax.

У меня есть одна форма, составленная из одной родительской формы, и две дочерние формы, которые обновляются запросом Jquery.post,Две дочерние формы, при отправке, обновляют счетчик, который сохраняется в соответствующих скрытых входных данных, и проверку при условии, что счетчики должны иметь хотя бы один элемент, зарегистрированный для обоих, работали нормально ... пока правило не станет более сложным.

Теперь, в зависимости от значения элементов первой сохраненной дочерней формы, правило «мин» должно быть активировано или нет.

Пример: элементы имеют значения кода между 200и 500;если есть хотя бы один элемент, зарегистрированный с кодом выше или равным 300, то должно применяться правило «мин», иначе оно не нужно.Проблема заключается в том, что его нужно решать динамически, потому что, если элементы с кодом> = 300 удаляются из первого списка дочерних форм или если нет элемента с таким значением кода, а затем один из них сохраняется, правила проверкинеобходимо обновить.

Я пытался обновить правило по возвращении функции успеха $ .post, оно только добавляет правило, а не удаляет его вообще:

$.get('{url of the updating form}', function(data){
    if (data >=300) {
       $('#counter_form_child_2').rules('add', { min: 1 });
    } else {
       $('#counter_form_child_2').rules('remove'); //removes all rules for this input
    }
});

Пробовалсделать запрос, который возвращает bool (true или false) поиск, если есть какой-либо элемент с кодом> = 300, и поместить его в другое скрытое поле:

//Code inside the js function that returns the boolean value
$.get('{url of the updating form}', function(data) {
     $('#item_above_300').val(data); //puts value into hidden field
});

//Code inside form validation rules
$("#parentForm").validate({
   ignore: ':hidden:not(#counter_form_child1, #counter_form_child1),
   rules : {
      (...)
      counter_child_form1: { min: 1 },
      counter_child_form2: { 
         min: { param: 1,
           depends: function(element) {
               return $('#item_above_300').val() === 1;
           }
         }
       }
     }
});

Мне нужна помощь, потому что я исчерпан изпробовать несколько альтернатив, и ничего не работает.Большое спасибо!

1 Ответ

0 голосов
/ 17 октября 2018

В конце концов, проблема была не в правилах ...
Тестируя действительные поля с помощью showErrors, я смог отладить и обнаружил, что скрытое поле обновлялось правильно, и ошибка подсчитывалась:

showErrors: function(errorMap, errorList) {
   var submitted = true;
   if (submitted) {
      var summary = "Precisa corrigir os seguintes erros: <br/>";
      $.each(errorMap, function(name, value) { 
         summary += " * (" + name +  + value + "<br/>"; 
      });                   
      $("#msg_aviso").html(summary);
      submitted = false;
   }
   this.defaultShowErrors();
}

Тогда я обнаружил, что проблема была в отображении сообщения об ошибке.И ТОЛЬКО в сообщении counter_child_form2.Итак, после исследования некоторых вопросов здесь, в Stack Overflow, я обнаружил, что решением был сброс DIV, который отображает это конкретное сообщение об ошибке при каждом событии отправки формы.И ... вуаля, это сработало!

$('#parentForm').click(function(){
    $("#counter_child_form2_error .error").html('');
    $("#parentForm").submit();
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...