IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

jQuery Discussion :

Validation de saisie de plusieurs select avec le même name


Sujet :

jQuery

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2019
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Septembre 2019
    Messages : 6
    Par défaut Validation de saisie de plusieurs select avec le même name
    Bonjour,

    Je bloque sur un élément, et j'aurai besoin de votre aide s'il vous plaît :

    en effet, j'essaye de vérifier que les selects qui ont le même name sont bien sélectionnés avec une option. Avec mon script, je réussis à vérifier le premier select, mais je bloque pour le deuxième select, mon script ne prends pas en compte celui-ci.

    Voici mon code:

    Code HTML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    <table id="rma_create_form" method="post">
    <tr class="detailsRma-1">
    	<td>
    		<label for="reason" class="label required">Reason for return<em>*</em> :</label><br>
     
    		<select class="validate-select" id="reason-1" name="reason">
    			<option value=""></option>
    			<option value="1">No particular reason</option>
    			<option value="2">delivery erro</option>
    			<option value="3">bad size</option>
    			<option value="4">defective</option>
    			<option value="5">other reason</option>
    		</select>
    	</td>
     
    	<td>
    		<label for="exchange" class="label required">Do you want an exchange or a refund ?<em>*</em> :</label>
    		<select class="validate-select" id="exchange-1" name="exchange">
    			<option value=""></option>
    			<option value="1">refund on your method of payment</option>
    			<option value="2">coupon on online customer accoun</option>
    			<option value="3">purchase on invoice</option>
    		</select>
    	</td>
    </tr>
    <tr class="detailsRma-2">
    	<td>
    		<label for="reason" class="label required">Reason for return<em>*</em> :</label><br>
     
    		<select class="validate-select" id="reason-2" name="reason">
    			<option value=""></option>
    			<option value="1">No particular reason</option>
    			<option value="2">delivery erro</option>
    			<option value="3">bad size</option>
    			<option value="4">defective</option>
    			<option value="5">other reason</option>
    		</select>
    	</td>
     
    	<td>
    		<label for="exchange" class="label required">Do you want an exchange or a refund ?<em>*</em> :</label>
    		<select class="validate-select" id="exchange-2" name="exchange">
    			<option value=""></option>
    			<option value="1">refund on your method of payment</option>
    			<option value="2">coupon on online customer accoun</option>
    			<option value="3">purchase on invoice</option>
    		</select>
    	</td>
    </tr>
    </table>

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    jQuery(document).ready(function(){
            jQuery.validator.setDefaults({
                debug: true,
                success: "valid"
            });
            jQuery("#rma_create_form").validate({
                rules: {
                    reason: "required",
                    exchange: "required"
                },
                messages: {
                    reason: "Please select a reason for your resend",
                    exchange: "Please enter the type of refund desired"
                },
            });
        });
    Merci d'avance pour votre aide !

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    1- déjà, il faudrait que le code HTML soit valide.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <table id="rma_create_form" method="post">
    ??

    2- La seule manière d'avoir plusieurs champs avec le même name, c'est de mettre des crochets :
    name="reason" -> name="reason[]".

    3- Par contre, je ne connais pas jQuery.validator.

  3. #3
    Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2019
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Septembre 2019
    Messages : 6
    Par défaut
    J'ai essayé avec les crochets mais sans succès, y-a t-il une action supplémentaire à faire?

    Code HTML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
     
    <form id="rma_create_form" method="post" action="...">
    <table>
    <tr class="detailsRma-1">
    	<td>
    		<label for="reason" class="label required">Reason for return<em>*</em> :</label><br>
     
    		<select class="validate-select" id="reason-1" name="reason[]">
    			<option value=""></option>
    			<option value="1">No particular reason</option>
    			<option value="2">delivery erro</option>
    			<option value="3">bad size</option>
    			<option value="4">defective</option>
    			<option value="5">other reason</option>
    		</select>
    	</td>
     
    	<td>
    		<label for="exchange" class="label required">Do you want an exchange or a refund ?<em>*</em> :</label>
    		<select class="validate-select" id="exchange-1" name="exchange[]">
    			<option value=""></option>
    			<option value="1">refund on your method of payment</option>
    			<option value="2">coupon on online customer accoun</option>
    			<option value="3">purchase on invoice</option>
    		</select>
    	</td>
    </tr>
    <tr class="detailsRma-2">
    	<td>
    		<label for="reason" class="label required">Reason for return<em>*</em> :</label><br>
     
    		<select class="validate-select" id="reason-2" name="reason[]">
    			<option value=""></option>
    			<option value="1">No particular reason</option>
    			<option value="2">delivery erro</option>
    			<option value="3">bad size</option>
    			<option value="4">defective</option>
    			<option value="5">other reason</option>
    		</select>
    	</td>
     
    	<td>
    		<label for="exchange" class="label required">Do you want an exchange or a refund ?<em>*</em> :</label>
    		<select class="validate-select" id="exchange-2" name="exchange[]">
    			<option value=""></option>
    			<option value="1">refund on your method of payment</option>
    			<option value="2">coupon on online customer accoun</option>
    			<option value="3">purchase on invoice</option>
    		</select>
    	</td>
    </tr>
    </table>
    </form>



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    jQuery(document).ready(function(){
            jQuery.validator.setDefaults({
                debug: true,
                success: "valid"
            });
            jQuery("#rma_create_form").validate({
                rules: {
                   "reason[]": "required",
                    "exchange[]": "required"
                },
                messages: {
                    "reason[]": "Please select a reason for your resend",
                    "exchange[]": "Please enter the type of refund desired"
                },
            });
        });

  4. #4
    Invité
    Invité(e)
    Par défaut
    A tester :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    jQuery(document).ready(function(){
      jQuery.validator.setDefaults({
        debug: true,
        success: "valid"
      });
      jQuery("#rma_create_form").validate({
        rules: {
          "reason[]": {
            required: true,
            minlength: 2
          },
          "exchange[]": {
            required: true,
            minlength: 2
          }
        },
        messages: {
          "reason[]": "Please select a reason for your resend",
          "exchange[]": "Please enter the type of refund desired"
        },
      });
    });
    Sinon, il faut mettre des name différents.

  5. #5
    Expert confirmé Avatar de Toufik83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    2 520
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 2 520
    Par défaut
    Salut,

    Lorsqu'on utilise les crochets [] dans l'attribut name, jQuery Validator ne sélectionne que le premier élément trouvé de rules, il faut ajouter une fonction spéciale pour qu'il puisse sélectionner tous les éléments.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
     
    $(document).ready(function() {
     
      jQuery.validator.setDefaults({
        debug: true,
        success: "valid"
      });
     
      $.validator.prototype.checkForm = function() {//la fonction checkForm a ajouter (pur javascript)
        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();
      };
     
      $("#rma_create_form").validate({
        rules: {
          'reason[]': 'required',
          "exchange[]": 'required'
        },
        messages: {
          "reason[]": "Please select a reason for your resend",
          "exchange[]": "Please select an exchange"
        }
     
      });
    });
    Edit : ou bien écrire la fonction avec la syntaxe jQuery :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
     $.validator.prototype.checkForm = function(f) {//fonction  a ajouter
        var this_=this;
        this_.prepareForm();
        $("[name='reason[]'],[name='exchange[]']")
        .each(function(){
        	this_.check($(this));
        });
        return this_.valid();
      };

  6. #6
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 659
    Billets dans le blog
    1
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     input[name=" ... "]').each(function() {
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

Discussions similaires

  1. Réponses: 9
    Dernier message: 07/03/2011, 16h18
  2. plusieurs select avec valeur du type valeur[indice]
    Par varex dans le forum Struts 1
    Réponses: 4
    Dernier message: 24/11/2008, 17h01
  3. Désactiver plusieurs SELECT avec javascript
    Par Agité dans le forum Général JavaScript
    Réponses: 12
    Dernier message: 12/10/2007, 17h00
  4. plusieur select avec le meme nom
    Par oughlad dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 26/05/2006, 12h09
  5. Problème pour différencier plusieurs select avec le même nom
    Par vallica dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 24/04/2006, 11h35

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo