jQuery berechnet die Summe der Werte in allen Textfeldern


74

Ich habe ein Bestellformular mit ca. 30 Textfeldern, die numerische Werte enthalten. Ich möchte die Summe all dieser Werte bei Unschärfe berechnen.

Ich weiß, wie man alle Textfelder auswählt, aber nicht, wie man sie durchläuft und alle ihre Werte addiert.

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

1
Schauen Sie sich JQuery für jede Funktion an ( api.jquery.com/each )
Lazarus

6
Ich möchte nur eines wissen. Warum wird die oben gepostete befragte Person nicht nach der Forschungsarbeit gefragt, die sie geleistet hat? Da die gestellte Frage keine Forschungsarbeit zeigt oder zumindest nicht, was er versucht hat, insbesondere wenn die Frage nicht sehr knifflig und komplex ist. Die Lösung für die obige Frage kann Google leicht sein, obwohl es 22 Stimmen erhalten hat. Keine Probleme bei Up-Votes, aber was ist mit der Forschungsarbeit? Werden Mitglieder mit weniger Punkten auf Stack nach Forschungsarbeiten gefragt?
Sam M

Mögliches Duplikat von Sum mit jQuery für jede Funktion
KyleMit

Antworten:


209

.

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

    // here, you have your sum
});​​​​​​​​​

Thx @MarkoDumic, aber was ist, wenn ich ein bisschen wie Zwischensummen (Menge * Preis) will, dann berechne den Grand Rotal!
Hos Mercury

Für eine etwas elegantere Lösung können Sie Array.prototype.reduce verwenden: stackoverflow.com/a/37466639/1988326
mark.monteiro



5

Ähnlich wie bei diesen Antworten, die als Plugin geschrieben wurden:

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

Für den Datensatz ist 1 * x schneller als Nummer (x) in Chrome


2

Verwenden Sie diese Funktion:

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

1
Der Preis ist nicht immer ganzzahlig.
Marko Dumic

3
Ich denke, Sie werden wollenparseFloat()
Alex

1

Dies sollte das Problem beheben:

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

5
Dadurch werden von .val () zurückgegebene Zeichenfolgen verkettet.
Marko Dumic

Ein Vorschlag eines Anon-Benutzers ist, Folgendes zu verwenden:var total = 0; $(".price").each( function(){ total += $(this).val() * 1; });
Fluffeh

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

bitte versuchen Sie es so ...


1
Ich bin nicht sicher, ob Sie das wollen:"2 apples" + "3 oranges" => 5
Marko Dumic

Ich habe ein Bestellformular mit ca. 30 Textfeldern , die numerische Werte enthalten.
JSobell

Ich bin mir nicht sicher, warum Sie, Marko, glauben würden, seine Methode sei für etwas anderes als das Hinzufügen von Werten.
Mike Bethany

0
$('.price').blur(function () {
    var sum = 0;
    $('.price').each(function() {

        if($(this).val()!="")
         {
            sum += parseFloat($(this).val());
         }

    });
        alert(sum);
});​​​​​​​​​

JS Fiddle


0

Dies wird zu 100% funktionieren:

<script type="text/javascript">

function calculate(){
var result = document.getElementById('result');
var el, i = 0, total = 0; 
while(el = document.getElementById('v'+(i++)) ) {
el.value = el.value.replace(/\\D/,"");
total = total + Number(el.value);
}
result.value = total;
if(document.getElementById('v0').value =="" && document.getElementById('v1').value =="" && document.getElementById('v2').value =="" ){
 result.value ="";
}
}
</script>
Some number:<input type="text" id ="v0" onkeyup="calculate()"><br>
Some number:<input type="text" id ="v1" onkeyup="calculate()"><br>
Some number:<input type="text" id ="v2" onkeyup="calculate()"><br>
Result: <input type="text" id="result" onkeyup="calculate()"  readonly><br>

Hallo, willkommen bei Stack Overflow. Wenn Sie eine Frage beantworten, die bereits viele Antworten enthält, geben Sie bitte einen zusätzlichen Einblick, warum die Antwort, die Sie geben, irgendwie inhaltlich ist und nicht einfach das wiedergibt, was bereits vom Originalposter überprüft wurde.
chb
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.