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()
   })
});
stef
quelle
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
});​​​​​​​​​
Marko Dumic
quelle
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
27

Eine etwas allgemeinere Funktion zum Kopieren / Einfügen für Ihr Projekt.

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

console.log(sumjq('.price'));
ubershmekel
quelle
Ich denke du meinst .val()und nicht.text()
Peter Meth
@ PeterMeth es scheint, es kommt auf stackoverflow.com/questions/807867/…
ubershmekel
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

Bron Davies
quelle
2

Verwenden Sie diese Funktion:

$(".price").each(function(){
total_price += parseInt($(this).val());
});
Deniss Kozlovs
quelle
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;
});
Bvandorp
quelle
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 ...

CMMaung
quelle
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

Sadikhasan
quelle
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>
Bajcepsme
quelle
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