Précédent   Forum des professionnels en informatique > Webmasters - Développement Web > JavaScript > Bibliothèques & Frameworks > jQuery
jQuery Forum d'entraide sur le framework jQuery. Avant de poster : Tutoriels jQuery, FAQ jQuery, Tous les tutoriels JavaScript, Toutes les FAQ JavaScript
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 19/01/2012, 16h55   #1
Membre confirmé
 
Avatar de renaud26
 
Inscription : mars 2003
Messages : 1 043
Détails du profil
Informations personnelles :
Âge : 48
Localisation : France, Puy de Dôme (Auvergne)

Informations forums :
Inscription : mars 2003
Messages : 1 043
Points : 285
Points : 285
Par défaut Manipulation d'un select multiple

Bonjour à tous,

J'ai un select multiple :

Code :
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 :
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
renaud26 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/01/2012, 10h36   #2
Rédacteur
 
Avatar de danielhagnoul
 
Homme Daniel Hagnoul
Étudiant perpétuel
Inscription : février 2009
Messages : 3 221
Détails du profil
Informations personnelles :
Nom : Homme Daniel Hagnoul
Âge : 61
Localisation : Belgique

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

Informations forums :
Inscription : février 2009
Messages : 3 221
Points : 6 767
Points : 6 767
Bonjour

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

FAQ jQuery

Mon cahier d’exercices sur jQuery & Co

Si un message vous a aidé ou vous semble pertinent, votez pour lui !
danielhagnoul est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/01/2012, 10h47   #3
Membre confirmé
 
Avatar de renaud26
 
Inscription : mars 2003
Messages : 1 043
Détails du profil
Informations personnelles :
Âge : 48
Localisation : France, Puy de Dôme (Auvergne)

Informations forums :
Inscription : mars 2003
Messages : 1 043
Points : 285
Points : 285
Bonjour, merci de ta réponse

C'est juste, j'ai donc fait :

Code :
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é...
renaud26 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/01/2012, 19h15   #4
Rédacteur
 
Avatar de danielhagnoul
 
Homme Daniel Hagnoul
Étudiant perpétuel
Inscription : février 2009
Messages : 3 221
Détails du profil
Informations personnelles :
Nom : Homme Daniel Hagnoul
Âge : 61
Localisation : Belgique

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

Informations forums :
Inscription : février 2009
Messages : 3 221
Points : 6 767
Points : 6 767
Bonsoir

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

FAQ jQuery

Mon cahier d’exercices sur jQuery & Co

Si un message vous a aidé ou vous semble pertinent, votez pour lui !
danielhagnoul est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/01/2012, 19h25   #5
Membre confirmé
 
Avatar de renaud26
 
Inscription : mars 2003
Messages : 1 043
Détails du profil
Informations personnelles :
Âge : 48
Localisation : France, Puy de Dôme (Auvergne)

Informations forums :
Inscription : mars 2003
Messages : 1 043
Points : 285
Points : 285
Bonsoir,

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

Code :
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 ?
renaud26 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/01/2012, 20h46   #6
Rédacteur
 
Avatar de danielhagnoul
 
Homme Daniel Hagnoul
Étudiant perpétuel
Inscription : février 2009
Messages : 3 221
Détails du profil
Informations personnelles :
Nom : Homme Daniel Hagnoul
Âge : 61
Localisation : Belgique

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

Informations forums :
Inscription : février 2009
Messages : 3 221
Points : 6 767
Points : 6 767
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 :
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 :
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);
	});
});
__________________

FAQ jQuery

Mon cahier d’exercices sur jQuery & Co

Si un message vous a aidé ou vous semble pertinent, votez pour lui !
danielhagnoul est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/01/2012, 09h30   #7
Membre confirmé
 
Avatar de renaud26
 
Inscription : mars 2003
Messages : 1 043
Détails du profil
Informations personnelles :
Âge : 48
Localisation : France, Puy de Dôme (Auvergne)

Informations forums :
Inscription : mars 2003
Messages : 1 043
Points : 285
Points : 285
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 :
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 :
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;
}
?>
renaud26 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/01/2012, 10h16   #8
Rédacteur
 
Avatar de danielhagnoul
 
Homme Daniel Hagnoul
Étudiant perpétuel
Inscription : février 2009
Messages : 3 221
Détails du profil
Informations personnelles :
Nom : Homme Daniel Hagnoul
Âge : 61
Localisation : Belgique

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

Informations forums :
Inscription : février 2009
Messages : 3 221
Points : 6 767
Points : 6 767
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 :
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 :
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();
__________________

FAQ jQuery

Mon cahier d’exercices sur jQuery & Co

Si un message vous a aidé ou vous semble pertinent, votez pour lui !
danielhagnoul est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/01/2012, 10h34   #9
Membre confirmé
 
Avatar de renaud26
 
Inscription : mars 2003
Messages : 1 043
Détails du profil
Informations personnelles :
Âge : 48
Localisation : France, Puy de Dôme (Auvergne)

Informations forums :
Inscription : mars 2003
Messages : 1 043
Points : 285
Points : 285
C'est parfait et je te remercie beaucoup !
J'ai en plus appris des choses nouvelles.
Bonne journée !
renaud26 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 02h41.


 
 
 
 
Partenaires

Hébergement Web