簡體   English   中英

部分中輸入值的jQuery總和

[英]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);
    });

使用parseFloat()parseInt()

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM