[英]jQuery sum of input values in sections
我試圖找到多個部分中輸入值的總和。 我已經把我的代碼放在下面了。
HTML:
<div class="section">
<input type="radio" name="q1" value="2"/>
<input type="radio" name="q2" value="0"/>
<input type="radio" name="q3" value="1"/>
<input type="radio" name="q4" value="3"/>
</div>
jQuery:
$('.section').each(function(){
var totalPoints = 0;
$(this).find('input').each(function(){
totalPoints += $(this).val();
});
alert(totalPoints);
});
請注意,這是我實際使用的代碼的簡化版本。 所以我希望這能提醒 2 個值(每個部分的總和):8 然后 6。相反,我只是得到所有值的字符串。 所以第一部分提醒 0143。
任何想法如何獲得累積總和而不是字符串?
你正在做 "1"+"1" 並期望它是 2 ( int )
它不是。
一個非常快速(且不完全正確)的解決方案是:
$('.section').each(function(){
var totalPoints = 0;
$(this).find('input').each(function(){
totalPoints += parseInt($(this).val()); //<==== a catch in here !! read below
});
alert(totalPoints);
});
抓住 ? 為什么 ?
答案:如果不使用基數,則應始終使用基數,前導零是八進制!
parseInt("010") //8 ( ff)
parseInt("010") //10 ( chrome)
parseInt("010",10) //10 ( ff)
parseInt("010",10) //10 ( chrome)
反正你懂這個意思。 供應基數!
最終解決方案(使用.each( function(index, Element) )
)
$('.section').each(function(){
var totalPoints = 0;
$(this).find('input').each(function(i,n){
totalPoints += parseInt($(n).val(),10);
});
alert(totalPoints);
});
var totalPoints = 0;
$('.section input').each(function(){
totalPoints = parseFloat($(this).val()) + totalPoints;
});
alert(totalPoints);
該值存儲為字符串,因此調用+=
進行字符串連接。 你想/需要把它當作一個數字,所以它做加法。 使用parseInt()
函數將其轉換為數字:
totalPoints += parseInt($(this).val(), 10);
javascript 函數 parseInt() 應該可以滿足您的要求,這是一個小提琴: http : //jsfiddle.net/k739M/
還有一些格式化的代碼:
$('.section').each(function(){
var totalPoints = 0;
$(this).find('input').each(function(){
totalPoints += parseInt($(this).val());
});
alert(totalPoints);
});
此外,如果您要在“.section input”上調用 $(each),您可以減少處理時間(和代碼)。
var totalPoints = 0;
$('.section input').each(function(){
totalPoints += parseInt($(this).val());
});
alert(totalPoints);
Use eval instead of parseInt
var a = "1.5";
var b = "2";
var c = parseInt(a) + parseInt(b);
console.log(c); //result 3
var a = "1.5";
var b = "2";
var c = eval(a) + eval(b);
console.log(c); //result 3.5 this is accurate
您還可以使用 Array 的reduce()
方法來獲取總和:
var arrayOfValues = $('.section input[type=radio]').map(function(index, input) {
return parseInt($(input).val());
}).toArray();
var sum = arrayOfValues.reduce(function(val1, val2) {
return val1 + val2;
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.