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 30/11/2011, 16h58   #1
Membre du Club
 
Inscription : mars 2008
Messages : 274
Détails du profil
Informations forums :
Inscription : mars 2008
Messages : 274
Points : 50
Points : 50
Par défaut Calcul d'un montant par ligne

Bonjour/ bonsoir,

J'ai une série de formulaire indéfinie dans lesquels se trouve respectivement une liste:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<form action="" method="post" class="edition-panier">
            <ul id="cmd_<?php echo $data->lg_commandes_id_commande; ?>">
              <li>
                <label>Quantité
                  <input type="text" name="qt" id="qt" class="qt" value="<?php echo $data-
 
>qt_lg_cmd; ?>">
                  </input>
                </label>
              </li>
              ...
              <li>
                <label>Montant
                  <input type="hidden" name="prix" id="prix" value="<?php echo $data->prix; ?
 
>"/>
                  <span class="montant"><?php echo $data->montant.' €'; ?></span>
                </label>
              </li>
...
</ul></form>
c'est du code généré dynamiquement, à travers une boucle PHP. Donc, je peux avoir 2 ou 3 champs 'qt' ou 'remarques' comme des dizaines.
Mais je dois avoir une interactivité sur chaque liste. Celle-ci consisterait, pour l'utilisateur, dès lors qu'il change la valeur du champ 'qt', de voir la modification immédiate de la valeur de la <span class="montant">
C'est quelque chose que je sais faire sur des identifiants uniques, mais pas dans ce cas-ci.
Je suis parti du principe de travailler à partir d'une liste unique, dans laquelle je sélectionnerai les éléments formulaires enfants:
Code :
1
2
3
4
5
$('#qt').live('keyup', function(){
var id = $(this).parents('ul').attr('id');
var prix = $('ul').attr('id', id).find($('#prix')).val();
alert(prix);
...
Mais non seulement ce code ne me renvoie pas un bon résultat, mais je ne suis pas sûr que ce soit la bonne méthode à suivre... Comment procéderiez-vous ?
Merci,
Ps : le montant sera le résultat des champs 'qt' * 'prix'
yann18 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/11/2011, 21h30   #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
Bonsoir

Attention à l'écriture d'un "input" (<input />) et un ID doit être unique pour toute la page web !

Exemple :

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
<form id="monFormID" class="edition-panier">
	<ul>
		<li>
			<label>Quantité
			<input type="text" name="qt" value="1"></input>
			</label>
		</li>
		<li>
			<label>Quantité
			<input type="text" name="qt" value="0"></input>
			</label>
		</li>
		<li>
			<label>Quantité
			<input type="text" name="qt" value="3"></input>
			</label>
		</li>
		<li>
			<label>Montant
			<input type="hidden" name="prix" value="22,50 €"/>
			<span class="montant"></span>
			</label>
		</li>
	</ul>
</form>
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
// on avec jQuery 1.7, sinon delegate. live est à proscrire.
 
$("#monFormID").on("keyup", "input[name='qt']", function(){
	var jObjUL = $(this).parents('ul'),
		tabQt = jObjUL.find("input[name='qt']").map(function(index, domElement){
			return $(domElement).val();
		}).get(),
		prix = jObjUL.find("input[name='prix']").val().replace(",","."),
		montant = 0;
 
	for(var i in tabQt){
		if ( $.isNumeric(tabQt[i]) ){
			montant += parseInt(tabQt[i]) * parseFloat(prix);
		}
	}
 
	// console.log( prix, tabQt, montant );
 
	jObjUL.find("span.montant").text(String(montant).replace(".",",") + " €");
});
__________________

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 01/12/2011, 11h22   #3
Membre du Club
 
Inscription : mars 2008
Messages : 274
Détails du profil
Informations forums :
Inscription : mars 2008
Messages : 274
Points : 50
Points : 50
Bonjour,

Merci bien pour la réponse. Toutefois, je suis toujours gêné dans la mesure où je dois m'appuyer sur un id formulaire. Or, je ne le connais pas à l'avance (puisque généré dynamiquement. J'ai modifié mon code pour m'adapter au vôtre)
Code :
1
2
<form action="" method="post" id="formPanier_<?php echo $data->lg_commandes_id_commande; ?>" class="edition-panier">
...
Et je dois bien le connaître pour savoir sur quel formulaire je travaille...
Code :
1
2
3
4
5
6
7
   $("input[name='qt']").live('click',function(){ //ne comprenant pas encore le fonctionnement de 'On', je reste provisoirement sur 'live' 
        var idForm = $(this).parents('form').attr('id');
        $('form').attr('id', idForm).on("keyup", "input[name='qt']", function(){
           ...
            alert('ok');
        });
    });
Merci,
yann18 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/12/2011, 11h44   #4
Membre du Club
 
Inscription : mars 2008
Messages : 274
Détails du profil
Informations forums :
Inscription : mars 2008
Messages : 274
Points : 50
Points : 50
Bonjour,

Rien à faire, je n'arrive pas à capturer l'id du formulaire avec 'on'
Si je fais
Code :
1
2
3
$("input[name='qt']").live('keyup', function(){
var idForm = $(this).parents('form').attr('id');
alert(idForm);
je l'obtiens bien
mais la même chose avec 'on'
Code :
1
2
3
$("input[name='qt']").on('keyup', function(){
var idForm = $(this).parents('form').attr('id');
alert(idForm);
Je n'ai rien. Pourtant, en regardant dans la documentation, j'ai cru comprendre que le comportement est le même que 'live'...
Précision : c'est du html ajouté dynamiquement.
Merci,
yann18 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/12/2011, 23h26   #5
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

Code :
1
2
3
// on avec jQuery 1.7, sinon delegate. live est à proscrire.
 
$("#monFormID").on("keyup", "input[name='qt']", function(){...
Si vous ne pouvez pas mettre un ID au formulaire, vous pouvez prendre comme référence l'ID d'un parent ou à la limite le "body": $("body").on("keyup", "input[name='qt']", function(){....
__________________

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 06/12/2011, 09h31   #6
Membre du Club
 
Inscription : mars 2008
Messages : 274
Détails du profil
Informations forums :
Inscription : mars 2008
Messages : 274
Points : 50
Points : 50
Bonjour,

Mais je peux mettre un id sur le formulaire:
Code :
<form id="formPanier_80" class="edition-panier" method="post">
les seules choses étant que je ne le connais pas par avance puisque généré dans une boucle PHP, et que je n'arrive pas à le capturer avec la méthode 'on'.
Merci,
yann18 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/12/2011, 15h54   #7
Membre du Club
 
Inscription : mars 2008
Messages : 274
Détails du profil
Informations forums :
Inscription : mars 2008
Messages : 274
Points : 50
Points : 50
J'ai fini par trouver quelque chose. Ce n'est peut-être pas la meilleure façon de procéder, mais c'est fonctionnel...
Code :
1
2
3
4
5
6
7
8
$('form').live('keyup', function(){
var idForm = $(this).attr('id');
var whatForm = $('#'+idForm);
var qt = whatForm.find("input[name='qt']").val();
var prix = whatForm.find("input[name='prix']").val();
var cout = qt * prix;
whatForm.find('span.montant').empty().append(cout+' €');
});
yann18 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/03/2012, 16h43   #8
Invité de passage
 
rou bourri
Inscription : mars 2010
Messages : 4
Détails du profil
Informations personnelles :
Nom : rou bourri

Informations forums :
Inscription : mars 2010
Messages : 4
Points : 2
Points : 2
Vous pouvez jettez un coup d'oeil sur ce tutorial,
ça pourra vous aidez

http://www.pengoworks.com/workshop/j...ion.plugin.htm

Bonne chance
riadh_2006 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 00h51.


 
 
 
 
Partenaires

Hébergement Web