Comment valider le tableau des entrées en utilisant le plugin valider jquery

Je suis nouveau dans le plugin de validation de jquery mais je voudrais savoir comment faire pour valider le tableau de boîtes de saisie en utilisant le plugin de validation..

ci-dessous est le code html.

<form id="transport-form">
  <input type="text" name="qty[]" id="qty1">
  <input type="text" name="qty[]" id="qty2" >
  <input type="text" name="qty[]" id="qty3">
  <input type="text" name="qty[]" id="qty4">
  <input type="submit value="submit">
</form>

et le code jquery est en dessous de

jQuery("#transport-form").validate({
        rules: {
            'qty[]': {
                required: true
            }
        },
    });

mais chaque fois que je clique sur Soumettre, il ne valide que la première valeur. toutes les valeurs du même nom ne sont pas validés. S'il vous plaît aider.

20
demandé sur Niranjan N Raju 2014-07-10 11:08:17

8 réponses

parfois nous avons besoin de valider un tableau d'éléments d'entrée: par exemple –

<form name="signupForm" class="cmxform" id="signupForm" method="get" action="">
    <select name="category[]" id="cat_1">
    <option value="">Select One</option>
    <option value="1">aa</option>
    <option value="2">bb</option>
    <option value="3">cc</option>
    <option value="4">dd</option>
    </select>

    <select name="category[]" id="cat_2">
    <option value="">Select One</option>
    <option value="5">ee</option>
    <option value="6">ff</option>
    <option value="7">gg</option>
    <option value="8">hh</option>
    </select>

    <select name="category[]" id="cat_3">
    <option value="">Select One</option>
    <option value="9">ii</option>
    <option value="10">jj</option>
    <option value="11">kk</option>
    <option value="12">ll</option>
    </select>

    <input class="submit" type="submit" value="Submit">
    </form>

maintenant nous allons utiliser jQuery validation plugin jquery.valider.js pour valider le formulaire. La condition sera que l'Utilisateur devra choisir la catégorie de chaque dropdown. Le script de validation sera comme ci-dessous -

<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="jquery.validate.js"></script>
<script type="text/javascript">
    $(document).ready(function() {
    // validate the comment form when it is submitted
    $("#signupForm").validate({
        rules: {
            "category[]": "required"
        },
        messages: {
            "category[]": "Please select category",
        }
    });
});
</script>

maintenant le problème est que le jquery readymade.valider.js ne valide que le premier élément de la catégorie[]. Donc, nous avons besoin de le modifier un peu bit.

à jquery.valider.js, nous pouvons trouver une fonction appelée checkForm, nous devons la modifier comme suit:

checkForm: function() {
    this.prepareForm();
    for (var i = 0, elements = (this.currentElements = this.elements()); elements[i]; i++) {
        if (this.findByName(elements[i].name).length != undefined && this.findByName(elements[i].name).length > 1) {
            for (var cnt = 0; cnt < this.findByName(elements[i].name).length; cnt++) {
                this.check(this.findByName(elements[i].name)[cnt]);
            }
        } else {
            this.check(elements[i]);
        }
    }
    return this.valid();
}

je viens d'obtenir cette solution http://www.codeboss.in/web-funda/2009/05/27/jquery-validation-for-array-of-input-elements/ j'espère que cela aidera quelqu'un..

29
répondu Amit 2017-01-25 13:32:51

Vous pouvez passer une option pour ignorer une partie d'un nom de champ; comme pour les commentaires de messages originaux, il y a beaucoup de cas d'utilisation pour avoir un nom[] nom de style en HTML, en particulier en utilisant PHP.

$("#my-form").validate({
  submitHandler: function(form) {
    form.submit();
  },
  ignore: [],
  rules: {
    'category[]': {
      required: true
    }
  }
});
12
répondu Christo 2015-01-27 20:29:31

j'ai remarqué que le jQuery valider plugin-je utiliser seulement détecter le premier élément avec un nom spécifique.

une autre façon de faire valider le plugin jQuery détecte aussi toutes les entrées au-delà de la première pourrait être en rendant les noms uniques. Vous pouvez donc remplacer:

<input type="text" name="qty[]" />
<input type="text" name="qty[]" />
<input type="text" name="qty[]" />
<input type="text" name="qty[]" />

avec:

<input type="text" name="qty[0]" />
<input type="text" name="qty[1]" />
<input type="text" name="qty[2]" />
<input type="text" name="qty[3]" />
6
répondu Quinten 2016-12-01 16:04:15

C'est la Meilleure solution que j'ai trouvé et je suis actuellement aide dans mon projet:

// Adding rule to each item in qtyi list 
jQuery('[id^=qty]').each(function(e) {
    jQuery(this).rules('add', {
        minlength: 2,
        required: true
    });
});
5
répondu Chris Sim 2018-08-01 15:33:43

vous devez faire l'indexation de chaque élément

ci-dessous est le code html.

<form id="transport-form">
  <input type="text" name="qty[0]" id="qty1">
  <input type="text" name="qty[1]" id="qty2" >
  <input type="text" name="qty[2]" id="qty3">
  <input type="text" name="qty[3]" id="qty4">
  <input type="submit value="submit">
</form>

et le code jquery est en dessous de

jQuery("#transport-form").validate({
    rules: {
        'qty[]': {
            required: true
        }
    },
});
2
répondu Ajay Patidar 2017-03-06 14:38:33

tout d'abord, pour jQuery pour distinguer entre les éléments, vous devez avoir un id différent par élément. Cela peut être fait programmatiquement lorsque vous ajoutez les entrées. Ensuite, ce que vous devez faire est de vérifier toutes les entrées avec nom commun à la fois. Pour cela, créez un validateur personnalisé en utilisant la fonction addMethod () comme décrit dans la documentation

jQuery.validator.addMethod("allRequired", function(value, elem){
        // Use the name to get all the inputs and verify them
        var name = elem.name;
        return  $('input[name="'+name+'"]').map(function(i,obj){return $(obj).val();}).get().every(function(v){ return v; });
    });

vous pouvez utiliser cette règle sur votre tableau elements :

$('form').validate(
        {
         rules: { 
               "nbPieces[]": "allRequired"
         },

         submitHandler : function(form, event) {
              event.preventDefault();   
              //... etc
         }
});

Pour les erreurs apparaissent correctement sur les champs vides cependant, vous pouvez avoir besoin de surcharger l'option errorPlacement de validate...

2
répondu Eva M 2017-05-17 01:18:34

Voici la solution sans donner d'indexation à array.

<form>
    <div>Name:
       <p>
        <input name="name_ct[]" id="id_ct0" type="text" class="form-control" placeholder="Add Variant 1 Name">
        </p>
    </div>
    <input type="button" value="Add Variant" />
    <input type="submit" />
</form>

Code js

$(document).ready(function () {
 $.validator.addMethod("mytst", function (value, element) {
        var flag = true;

      $("[name^=name_ct]").each(function (i, j) {
                        $(this).parent('p').find('label.error').remove();
$(this).parent('p').find('label.error').remove();                        
                        if ($.trim($(this).val()) == '') {
                            flag = false;

                            $(this).parent('p').append('<label  id="id_ct'+i+'-error" class="error">This field is required.</label>');
                        }
                    });


                    return flag;


    }, "");
$("form").validate({

    ignore: '',
    rules: {
        "name_ct[]": {
            mytst:true
        }
    },
    submitHandler: function () {
        //you can add code here to recombine the variants into one value if you like, before doing a $.post
         form.submit();
        alert('successful submit');
        return false;
    }
});

var j = 1;
$('input[type="button"]').click(function () {
    $('form div').append('<p><input name="name_ct[]" id="id_ct' + j + '" type="text" class="form-control" placeholder="Add Variant ' + j + ' Name " ></p>');

    j++;
});
});

vous pouvez voir ici dans JS fiddle: https://jsfiddle.net/q0d76aqx/42/

1
répondu shankit 2018-01-04 09:23:22

jQuery form Validator est un plugin jQuery riche et multilingue qui permet de valider facilement les entrées de l'utilisateur tout en gardant votre balisage HTML propre à partir du code javascript. Même si ce plugin dispose d'une large gamme de fonctions de validation, il est conçu pour nécessiter le moins de trafic réseau jQuery possible. Pour ce faire, on regroupe les fonctions de validation en "modules", ce qui permet de ne charger que les fonctions nécessaires à la validation d'un forme.

<form action="" id="registration-form">
  <p>
    E-mail
    <input name="email" data-validation="email">
  </p>
  <p>
    User name
    <input name="user" data-validation="length alphanumeric" 
         data-validation-length="3-12" 
         data-validation-error-msg="User name has to be an alphanumeric value (3-12 chars)">
  </p>
  <p>
    Password
    <input name="pass_confirmation" data-validation="strength" 
         data-validation-strength="2">
  </p>
  <p>
    Repeat password
    <input name="pass" data-validation="confirmation">
  </p>
  <p>
    Birth date
    <input name="birth" data-validation="birthdate" 
         data-validation-help="yyyy-mm-dd">
  </p>
  <p>
    Country
    <input name="country" id="country" data-validation="country">
  </p>
  <p>
    Profile image
    <input name="image" type="file" data-validation="mime size required" 
         data-validation-allowing="jpg, png" 
         data-validation-max-size="300kb" 
         data-validation-error-msg-required="No image selected">
  </p>
  <p>
    User Presentation (<span id="pres-max-length">100</span> characters left)
    <textarea name="presentation" id="presentation"></textarea>
  </p>
  <p>
    <input type="checkbox" data-validation="required" 
         data-validation-error-msg="You have to agree to our terms">
    I agree to the <a href="..." target="_blank">terms of service</a>
  </p>
  <p>
    <input type="submit" value="Validate">
    <input type="reset" value="Reset form">
  </p>
</form>
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/jquery-form-validator/2.3.26/jquery.form-validator.min.js"></script>
<script>

  $.validate({
    modules : 'location, date, security, file',
    onModulesLoaded : function() {
      $('#country').suggestCountry();
    }
  });

  // Restrict presentation length
  $('#presentation').restrictLength( $('#pres-max-length') );

</script>
...
-2
répondu Ravindra Bohra 2017-11-17 16:01:52