JQuery сумма входных значений в разделах - программирование
Подтвердить что ты не робот

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.

Любые идеи, как я получаю кумулятивную сумму вместо строки?

4b9b3361

Ответ 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);