2017-05-30 4 views
0

en utilisant https://github.com/DubFriend/jquery.repeater, je dois ajouter le message de validation des champs dans mon modèle de répéteur.Mettre à jour les attributs pour l'autre balise que l'entrée avec jquery.repeater? (utile pour le message de validation ajax)

Ainsi, le conteneur durée du message data-validate-for attribut doit être mis à jour en même temps que son nom d'entrée correspondant parce que ma recherche cadre ajax ce pour injecter le message d'erreur si le champ n'est pas rempli correctement

ci-dessous le code source html

<div data-repeater-list="group-a"> 

<!-- repeater template --> 
<div data-repeater-item style="display:none;"> 

<label for="date">Date</label> 
<input type="date" name="date" /> 
<span class="error_message" data-validate-for="date"></span> 

<label for="amount">Amount</label> 
<input type="text" name="amount" /> 
<span class="error_message" data-validate-for="amount"></span> 

<input data-repeater-delete type="button" value="delete" /> 
</div> 

<!-- first group displayed --> 
<div data-repeater-item> 

<label for="date">Date</label> 
<input type="date" name="date" /> 
<span class="error_message" data-validate-for="date"></span> 

<label for="amount">Amount</label> 
<input type="text" name="amount" /> 
<span class="error_message" data-validate-for="amount"></span> 

<input data-repeater-delete type="button" value="delete" /> 
</div> 

</div> 

valeurs attendues après l'article utilisateur ajouter

<!-- first group displayed --> 
<div data-repeater-item> 

<label for="date">Date</label> 
<input type="date" name="group[1][date]" /> 
<span class="error_message" data-validate-for="group[1][date]"></span> 

<label for="amount">Amount</label> 
<input type="text" name="group[1][amount]" /> 
<span class="error_message" data-validate-for="group[1][amount]"></span> 

<input data-repeater-delete type="button" value="Supprimer" /> 
</div> 

Est-il possible à l'aide native fonctions de bibliothèque répéteur pour mettre à jour d'autres attributs comme data-validate-for='same_input_name' ou i besoin d'ajouter du code jquery quelque part (bidouille bibliothèque ou hors de la boîte?)

grâce par avance

Répondre

0

i ajouter ce code dans jquery.repeater.js version 1.2.1

.... 
    var setIndexes = function ($items, groupName, repeaters) { 

     $items.each(function (index) { 

      var $item = $(this); 

      $item.data('item-name', groupName + '[' + index + ']'); 
      $filterNested($item.find('[name]'), repeaters) 
      .each(function() { 

       var $input = $(this); 

       // match non empty brackets (ex: "[foo]") 
       var matches = $input.attr('name').match(/\[[^\]]+\]/g); 

       var name = matches ? 
        // strip "[" and "]" characters 
        last(matches).replace(/\[|\]/g, '') : 
        $input.attr('name'); 

       var newName = groupName + '[' + index + '][' + name + ']' + 
        ($input.is(':checkbox') || $input.attr('multiple') ? '[]' : ''); 

       $input.attr('name', newName); 

       $foreachRepeaterInItem(repeaters, $item, function (nestedFig) { 
        var $repeater = $(this); 
        setIndexes(
         $filterNested($repeater.find('[data-repeater-item]'), nestedFig.repeaters || []), 
         groupName + '[' + index + ']' + 
            '[' + $repeater.find('[data-repeater-list]').first().data('repeater-list') + ']', 
         nestedFig.repeaters 
        ); 
       }); 
      }); 
      //***** START MODIFICATION 
      if (fig.errorMessage) { 

       $filterNested($item.find('.' + fig.errorMessageClass), repeaters) 
        .each(function() { 

         var $span = $(this); 

         // match non empty brackets (ex: "[foo]") 
         var matches = $span.attr('data-validate-for').match(/\[[^\]]+\]/g); 

         var dataValidateFor = matches ? 
          // strip "[" and "]" characters 
          last(matches).replace(/\[|\]/g, '') : 
          $span.attr('data-validate-for');       

         var newDataValidateFor = groupName + '[' + index + '][' + dataValidateFor + ']' + 
          ($span.is(':checkbox') || $span.attr('multiple') ? '[]' : '');       

         $span.attr('data-validate-for', newDataValidateFor); 

        }); 
      } 
      //***** END MODIFICATION 
     }); 

     $list.find('input[name][checked]') 
      .removeAttr('checked') 
      .prop('checked', true); 
    }; 
    .... 

et dans le fichier de configuration repater.js i ajouter

// (Optional) 
    // manage fields validation message 
    // 
    errorMessage: true, 
    errorMessageClass: 'error_message', 

espoir qui peut aider quelqu'un