2010-03-10 17 views
52

Mam formularz zamówienia z około 30 polami tekstowymi, które zawierają wartości liczbowe. Chciałbym obliczyć sumę wszystkich tych wartości podczas rozmycia.jQuery obliczyć sumę wartości we wszystkich polach tekstowych

W jaki sposób wybrać wszystkie pola tekstowe, ale nie można ich przeglądać i dodawać wszystkie ich wartości?

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

Spójrz na JQuery każda funkcja (http://api.jquery.com/each/) – Lazarus

+5

prostu chcesz wiedzieć jedno. Dlaczego powyższa zaksięgowana pytana osoba nie jest pytana o pracę badawczą, którą wykonał. Ponieważ zamieszczone pytanie nie pokazuje żadnych prac badawczych ani tego, co próbował, szczególnie, gdy pytanie nie jest bardzo trudne i skomplikowane. Rozwiązaniem powyższego pytania może być Google, ale wciąż otrzymało 22 głosów w górę. Nie ma problemów z głosowaniem w górę, ale co z pracą badawczą? Czy członkowie o mniejszych punktach na Stacku są pytani o pracę badawczą? –

+0

Możliwy duplikat funkcji [Sum przy użyciu jQuery dla każdej funkcji] (http://stackoverflow.com/questions/4377410/sum-using-jquery-each-function) – KyleMit

Odpowiedz

164

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

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

Thx @MarkoDumic, ale co, jeśli chcę trochę jak sumy częściowe (qty * price) następnie obliczyć wielki rotal! –

+0

Dla nieco bardziej eleganckiego rozwiązania można użyć Array.prototype.reduce: http://stackoverflow.com/a/37466639/1988326 –

1

Użyj tej funkcji:

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

Cena nie zawsze jest liczbą całkowitą. –

+2

Myślę, że będziesz chciał 'parseFloat()' – alex

1

To powinno go naprawić:

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

Spowoduje to połączenie ciągów zwracanych przez .val(). –

+0

Sugestia użytkownika Anon polega na użyciu: 'var total = 0; $ ("cena"). Each (function() { total + = $ (this) .val() * 1; }); ' – Fluffeh

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

spróbuj jak jes s ...

+1

Nie jestem pewien, czy tego chcesz:' "2 jabłka" + "3 pomarańcze" => 5' –

+0

Mam formularz zamówienia z około 30 polami tekstowymi **, które zawierają wartości liczbowe. ** – JSobell

+0

Nie jestem pewien, dlaczego ty, Marko, uważasz, że jego metoda jest dla czegoś innego niż dodawanie wartości. –

21

Nieco bardziej ogólna funkcja kopiowania/wklejania dla twojego projektu.

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

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

Myślę, że masz na myśli '.val()', a nie '.text()' –

+0

@PeterMeth wydaje się, że zależy to od http://stackoverflow.com/questions/807867/difference-between-val-and-text – ubershmekel

4

Podobnie wzdłuż linii tych odpowiedzi pisemnych jako plugin:

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

Dla przypomnienia 1 * x jest większa niż liczba (x) w Chrome

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

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

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

JS Fiddle

Powiązane problemy