83 votes

jQuery calcule la somme des valeurs dans tous les champs de texte

J'ai un formulaire de commande avec environ 30 champs de texte qui contiennent des valeurs numériques. Je voudrais calculer la somme de toutes ces valeurs sur le flou.

Je sais comment sélectionner tous les champs de texte mais pas comment les parcourir en boucle et additionner toutes leurs valeurs ?

$(document).ready(function(){
   $(".price").blur(function() {
    //loop and add up every value from $(".price").val()
   })
});

1 votes

Regardez chaque fonction de JQuery ( api.jquery.com/each )

6 votes

Je veux juste savoir pourquoi la personne interrogée ci-dessus n'est pas interrogée sur le travail de recherche qu'elle a effectué. La question posée ne montre aucun travail de recherche ou ce qu'il a essayé au moins, surtout lorsque la question n'est pas très délicate et complexe. La solution à la question ci-dessus peut être facilement trouvée sur Google, mais elle a tout de même reçu 22 votes positifs. Pas de problème pour les votes positifs, mais qu'en est-il du travail de recherche ? Est-ce que les membres qui ont moins de points sur Stack sont interrogés sur le travail de recherche ?

0 votes

226voto

Marko Dumic Points 6055
$('.price').blur(function () {
    var sum = 0;
    $('.price').each(function() {
        sum += Number($(this).val());
    });

    // here, you have your sum
});

0 votes

Merci @MarkoDumic mais que faire si je veux des sous-totaux (quantité * prix) et calculer le grand total ?

0 votes

Pour une solution légèrement plus élégante, vous pouvez utiliser Array.prototype.reduce : stackoverflow.com/a/37466639/1988326

30voto

ubershmekel Points 2254

Une fonction de copier/coller un peu plus générique pour votre projet.

sumjq = function(selector) {
    var sum = 0;
    $(selector).each(function() {
        sum += Number($(this).text());
    });
    return sum;
}

console.log(sumjq('.price'));

0 votes

Je pense que vous voulez dire .val() et non .text()

0 votes

@PeterMeth il semble que cela dépend stackoverflow.com/questions/807867/

6voto

brontech.com Points 3188

Dans le même ordre d'idées que ces réponses écrites sous forme de plugin :

$.fn.sum = function () {
    var sum = 0;
    this.each(function () {
        sum += 1*($(this).val());
    });
    return sum;
};

Pour mémoire 1 * x est plus rapide que Number(x) dans Chrome

4voto

Deniss Kozlovs Points 2519

Utilisez cette fonction :

$(".price").each(function(){
total_price += parseInt($(this).val());
});

1 votes

Le prix n'est pas toujours entier.

3 votes

Je pense que vous voudrez parseFloat()

2voto

Bvandorp Points 11

Cela devrait le réparer :

var total = 0;   
$(".price").each( function(){
          total += $(this).val() * 1;
});

5 votes

Ceci concaténera les chaînes de caractères retournées par .val().

0 votes

Une suggestion d'un utilisateur anonyme est d'utiliser ce qui suit : var total = 0; $(".price").each( function(){ total += $(this).val() * 1; });

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X