Подсчет элементов не работает - PullRequest
0 голосов
/ 08 февраля 2012

У меня есть таблица, и я хочу вычислить каждый элемент следующим образом:

calc-this-cost * calc-this-cost(value of checkbox) = calc-this-total

Затем сложите все calc-this-cost и поместите его в значение totalcost div.Это таблица:

  <td class="params2">
    <table id="calc-params">
    <tr>
    <td>aaa</td><td class="calc-this-cost">159964</td><td class="calc-this-count">
    <input type="checkbox" name="a002" value="0" onclick="calculate(this);" />
    </td><td class="calc-this-total">0</td>
    </tr>
    <tr>
    <td>bbb</td><td class="calc-this-cost">230073</td><td class="calc-this-count">
    <input type="checkbox" name="a003" value="0" onclick="calculate(this);" />
    </td><td class="calc-this-total">0</td>
    </tr>
    <tr>
    <td>ccc</td><td class="calc-this-cost">159964</td><td class="calc-this-count">
    <input type="checkbox" name="a004" value="1" onclick="calculate(this);" />
    </td><td class="calc-this-total">0</td>
    </tr>
    ........
    </table>
    .......
    </td>
<div id="calc-total-price">TOTAL COST:&nbsp;&nbsp;<span>0</span></div>

Мой скрипт (в функции расчета)

var totalcost=0;
    $('.params2 tr').each(function(){
        var count=parseFloat($('input[type=checkbox]',$(this)).attr('value'));
        var price=parseFloat($('.calc-this-cost',$(this)).text().replace(" ",""));
        $('.calc-this-total',$(this)).html(count*price);
        totalcost+=parseFloat($('.calc-this-cost',$(this)).text());
    });
    $('#calc-total-price span').html(totalcost);

Подсчет каждого элемента и вывод результата в calc-this-cost - отлично работает.

Но общая стоимость результата NaN.Почему?

Ответы [ 2 ]

2 голосов
/ 08 февраля 2012
  1. [general] не обрабатывайте parseFloat () больше, чем нужно
  2. [general] перемещайте повторяющийся код в функции
  3. [jQuery] используйте .find () над контекстоми узлы кэша ($ row)
  4. [общие] посмотрите, как работает String.replace ()
  5. [общие] посмотрите на Number.toFixed () для отображения значений с плавающей точкой

пример

var totalcost = 0,
    toFloat = function(value) {
        // remove all whitespace
        // note that replace(" ", '') only replaces the first _space_ found!
        value = (value + "").replace(/\s+/g, '');
        value = parseFloat(value || "0", 10);
        return !isNaN(value) ? value : 0;
    };

$('.params2 tr').each( function() {
    var $row = $(this),
        count = toFloat($row.find('.calc-this-count input').val()), 
        price = toFloat($row.find('.calc-this-cost').text()),
        total = count * price;

    $row.find('calc-this-total').text(total.toFixed(2));
    totalcost += total;
});

$('#calc-total-price span').text(totalcost.toFixed(2));
1 голос
/ 08 февраля 2012

console.log() решит все ваши проблемы:

$('.params2 tr').each(function(){
    var count=parseFloat($('input[type=checkbox]',$(this)).attr('value'));
    var price=parseFloat($('.calc-this-cost',$(this)).text().replace(" ",""));
    $('.calc-this-total',$(this)).html(count*price);
    totalcost+=parseFloat($('.calc-this-cost',$(this)).text());
    console.log(count, price, totalcost)
});

Добавь больше логов, где каждый что-то не понимает. Разве я не сказал вам использовать ведение журнала? :)

...