JQuery сумма входных значений в разделах
Я пытаюсь найти сумму входных значений в нескольких разделах. Я поставил свой код ниже.
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 then 6. Вместо этого я просто получаю строку из всех значений. Поэтому первый раздел предупреждает 0143.
Любые идеи, как я получаю кумулятивную сумму вместо строки?
Ответы
Ответ 1
Вы делаете "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);
});
поймать? почему?
Ответ:
Вы должны всегда использовать аргумент radix, если вы этого не сделали, ноль в начале восьмеричный!
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);
});
Ответ 2
Используйте parseFloat() или parseInt()
var totalPoints = 0;
$('.section input').each(function(){
totalPoints = parseFloat($(this).val()) + totalPoints;
});
alert(totalPoints);
Ответ 3
Значение сохраняется как строка, поэтому вызов +=
выполняет конкатенацию строк. Вы хотите/должны обрабатывать его как число, поэтому оно добавляет. Используйте parseInt()
, чтобы преобразовать его в число:
totalPoints += parseInt($(this).val(), 10);
Ответ 4
Функция javascript parseInt() должна достигать того, что вам требуется, здесь скрипка:
http://jsfiddle.net/k739M/
И некоторый отформатированный код:
$('.section').each(function(){
var totalPoints = 0;
$(this).find('input').each(function(){
totalPoints += parseInt($(this).val());
});
alert(totalPoints);
});
Кроме того, если вы должны были бы вызвать $(каждый) на ".секторный вход", вы можете уменьшить количество времени обработки (и кода).
var totalPoints = 0;
$('.section input').each(function(){
totalPoints += parseInt($(this).val());
});
alert(totalPoints);