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 :

Manipulation d'un select multiple


Sujet :

jQuery

  1. #1
    Membre éprouvé Avatar de renaud26
    Homme Profil pro
    Webmaster
    Inscrit en
    Mars 2003
    Messages
    1 365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Mars 2003
    Messages : 1 365
    Par défaut Manipulation d'un select multiple
    Bonjour à tous,

    J'ai un select multiple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    <select name="listes_cible" id="listes_cible" multiple="multiple" onclick="compte_envois(this.value)">
    <option value="1">Liste 1</option>
    <option value="2">Liste 2</option>
    </select>
    La fonction compte_envois fait un appel ajax qui compte et retour le nombre d'adresses contenues dans la liste sélectionnée.

    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
     
    function compte_envois(id_liste){
    var total = 0;	
    		$.ajax({
    			   type:"POST",
    			   url:  "compte_adrs.php",
    			   data: "id_liste="+id_liste,
    			   success: function(nb_adrs){
    				   //alert(nb_adrs);
    				   if(nb_adrs){
    					  total += parseInt(nb_adrs); 
     
    			           }
                                });
    		 });
    }
    Donc le php retourne bien le nombre d'adresse pour la liste sélectionnée. Mais je voudrais que ce total s'incrémente si le user sélectionne d'autres listes dans le selct et se décrémente dans le cas contraire. J'ai essayé avec une variable, un tableau, pour stocker l'info, mais cela ne fonctionne pas.

    Alors je veux bien de l'aide.
    Merci

  2. #2
    Rédacteur

    Avatar de danielhagnoul
    Homme Profil pro
    Étudiant perpétuel
    Inscrit en
    Février 2009
    Messages
    6 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant perpétuel
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2009
    Messages : 6 389
    Billets dans le blog
    125
    Par défaut
    Bonjour

    Logique ! Votre fonction déclare et initialise la variable "total" à chaque appel !

    Blog

    Sans l'analyse et la conception, la programmation est l'art d'ajouter des bogues à un fichier texte vide.
    (Louis Srygley : Without requirements or design, programming is the art of adding bugs to an empty text file.)

  3. #3
    Membre éprouvé Avatar de renaud26
    Homme Profil pro
    Webmaster
    Inscrit en
    Mars 2003
    Messages
    1 365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Mars 2003
    Messages : 1 365
    Par défaut
    Bonjour, merci de ta réponse

    C'est juste, j'ai donc fait :

    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
     
    var total = 0;
     
    function compte_envois(id_liste){
     
    	$("#listes_cible").each(function(){  		
     
                    if($("#listes_cible option").is(':selected')){
    			//alert(id_liste + " est select");
    			$.ajax({
    			   type:"POST",
    			   url:  "compte_adrs.php",
    			   data: "id_liste="+id_liste,
    			   success: function(nb_adrs){
    				   //alert(nb_adrs);
    				   if(nb_adrs){
    					  total += parseInt(nb_adrs); 
    				   }
    			   }
    			 });
    		}else{
    			//alert(id_liste + " n'est pas select");
     
    		}
    	}); 
    	$("#nb_envois").html(total);
    }
    Mais je ne sais pas gérer le else si le user déselectionne une option et que je dois retrancher le nombre d'adresses du total. Je suppose qu'il faut un autre appel ajax ? Bref je suis un peu largué...

  4. #4
    Rédacteur

    Avatar de danielhagnoul
    Homme Profil pro
    Étudiant perpétuel
    Inscrit en
    Février 2009
    Messages
    6 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant perpétuel
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2009
    Messages : 6 389
    Billets dans le blog
    125
    Par défaut
    Bonsoir

    Oui ! le même appel, mais avec un total -= parseInt(nb_adrs, 10);

    Blog

    Sans l'analyse et la conception, la programmation est l'art d'ajouter des bogues à un fichier texte vide.
    (Louis Srygley : Without requirements or design, programming is the art of adding bugs to an empty text file.)

  5. #5
    Membre éprouvé Avatar de renaud26
    Homme Profil pro
    Webmaster
    Inscrit en
    Mars 2003
    Messages
    1 365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Mars 2003
    Messages : 1 365
    Par défaut
    Bonsoir,

    Ca ne fonctionne pas, car à mon avis, quelque chose cloche dans la boucle et le is(selected) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    $("#listes_cible").each(function(){  		
    	if($("#listes_cible option").is(':selected')){
               //ici on ajoute le nb adrs
            }else{
               //ici on l'enlève
            }
    });
    Mais quoi ?

  6. #6
    Rédacteur

    Avatar de danielhagnoul
    Homme Profil pro
    Étudiant perpétuel
    Inscrit en
    Février 2009
    Messages
    6 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant perpétuel
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2009
    Messages : 6 389
    Billets dans le blog
    125
    Par défaut
    Bonsoir

    Désolé ! comme je viens de le dire dans une autre réponse, je suis trop occupé pour l'instant et je n'ai pas vu que la logique du code est mauvaise.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <select id="listes_cible" name="listes_cible" multiple="multiple">
    	<option value="1">Liste 1</option>
    	<option value="2">Liste 2</option>
    </select>
    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
    var total = 0;
     
    $( "#listes_cible" ).change( function(){
    	/*
    	 * Lorsque l'utilisateur change la sélection,
    	 * $( this ).val() est un array qui contient
    	 * les valeurs stockées dans l'attribut value
    	 * des options sélectionnées.
    	 *
    	 * Exemple, si l'utilisateur à tout sélectionner
    	 * ( this ).val() contient : [ "1", "2" ].
    	 *
    	 * Coté serveur (le paramètre est listeArray), 
             * vous totalisé le nb_adrs des listes
    	 * sélectionnées et vous retournez le résultat.
    	 */
    	$.post( "compte_adrs.php", { "listeArray" : $( this ).val() }, function( nb_adrs ){
    		total += parseInt(nb_adrs);
    	});
    });

    Blog

    Sans l'analyse et la conception, la programmation est l'art d'ajouter des bogues à un fichier texte vide.
    (Louis Srygley : Without requirements or design, programming is the art of adding bugs to an empty text file.)

  7. #7
    Membre éprouvé Avatar de renaud26
    Homme Profil pro
    Webmaster
    Inscrit en
    Mars 2003
    Messages
    1 365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Mars 2003
    Messages : 1 365
    Par défaut
    Bonjour,

    Je me doute bien que tu n'as pas que ça à faire...et je te remercie de ton aide.
    Il y a encore un petit loup, au 1er clic sur le select, le chiffre 0 s'affiche dans la zone, puis le nombre d'adresses s'affiche au 2ème clic, et ensuite si on passe d'une option à l'autre, on cumule. IL faudrait pouvoir remettre à 0 à un moment donné...
    Voici le code que j'ai fait, selon tes indications :

    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
     
    <select id="listes_cible" name="listes_cible[]" multiple="multiple">
    	<option value="1">Liste 1</option>
    	<option value="2">Liste 2</option>
    </select>
    <div id="nb_envois"></div>
    <script type="text/javascript">
    var total = 0;
     
    //function compte_envois(){
    $( "#listes_cible" ).change( function(){
    $.post( "compte_adrs.php", { "listeArray" : $( this ).val() }, function( nb_adrs ){
    		total += parseInt(nb_adrs);
    		//alert(nb_adrs);
    	});		
    $("#nb_envois").html(total);
    });	
    </script>
    et côté PHP

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    <?php
    $tot_adrs = 0;
    if(!empty($_POST['listeArray'])){
            foreach($_POST['listeArray'] as $id_liste){
                    $tot_adrs += compte_emails_liste($id_liste);
            }
            echo $tot_adrs;
    }
    ?>

  8. #8
    Rédacteur

    Avatar de danielhagnoul
    Homme Profil pro
    Étudiant perpétuel
    Inscrit en
    Février 2009
    Messages
    6 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant perpétuel
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2009
    Messages : 6 389
    Billets dans le blog
    125
    Par défaut
    Bonjour

    Décidément ! Je suis fatigué ! Il ne faut plus de "+=" puisque l'on donne le total des liens sélectionnés à chaque modification des sélections.

    Bien entendu, si vous présélectionnez des options à l'ouverture de la page, total ne doit plus être 0.

    Vous pouvez déclencher le calcul en provoquant l'événement change : $( "#listes_cible" ).change();

    Exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <select id="listes_cible" name="listes_cible[]" multiple="multiple">
    	<option value="1" selected>Liste 1</option>
    	<option value="2">Liste 2</option>
    </select>
    <div id="nb_envois"></div>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    //function compte_envois(){
    $( "#listes_cible" ).change( function(){
        var total;
     
    	$.post( "compte_adrs.php", { "listeArray" : $( this ).val() }, function( nb_adrs ){
    		total = parseInt(nb_adrs);
    		//alert(nb_adrs);
    	});
     
    	$("#nb_envois").html(total);
    });
     
    $( "#listes_cible" ).change();

    Blog

    Sans l'analyse et la conception, la programmation est l'art d'ajouter des bogues à un fichier texte vide.
    (Louis Srygley : Without requirements or design, programming is the art of adding bugs to an empty text file.)

  9. #9
    Membre éprouvé Avatar de renaud26
    Homme Profil pro
    Webmaster
    Inscrit en
    Mars 2003
    Messages
    1 365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Mars 2003
    Messages : 1 365
    Par défaut
    C'est parfait et je te remercie beaucoup !
    J'ai en plus appris des choses nouvelles.
    Bonne journée !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Select multiple
    Par lfournial dans le forum Struts 1
    Réponses: 20
    Dernier message: 24/02/2011, 12h14
  2. select multiple sur plusieurs tables
    Par syl2095 dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 08/12/2004, 15h48
  3. [VB6] sélection multiple de colonne dans excel grâce à VB
    Par biquet dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 02/08/2004, 12h44
  4. <select multiple ...>
    Par ayobo dans le forum ASP
    Réponses: 2
    Dernier message: 06/07/2004, 08h49
  5. [C#]Sauvegarde d'une selection multiple d'une listbox?
    Par onouiri dans le forum ASP.NET
    Réponses: 7
    Dernier message: 29/04/2004, 17h16

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