2012-02-08 8 views
0

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

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); 

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

Но итоговый результат NaN. Зачем?

ответ

1

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) 
}); 

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

2
  1. [вообще] не parseFloat() больше, чем нужно
  2. [общего] перемещения повторяющегося кода к функциям
  3. [JQuery] использовать .find() через контекст и кэш-узлов ($ строка)
  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)); 
Смежные вопросы