动态字段 - 添加总计

时间:2011-12-23 03:53:35

标签: php javascript jquery

我一直试图找到一种方法来完成这项工作,但结果只是与“NaN”一样接近。

我有下表:

     <table border="1" class="autoTable">

     <tr><td><input name="description[]" id="description" value="<?php echo $description; ?>" size="55" onKeyPress="return disableEnterKey(event)" />
    </td><td align="center"><input type="checkbox"  name="stocked[]" id="stocked" value="<?php echo $stocked; ?>" size="5" onKeyPress="return disableEnterKey(event)" />
    </td><td><input name="quantity[]" id="quantity" value="<?php echo $quantity; ?>" size="5" onKeyPress="return disableEnterKey(event)" />
    </td><td><input name="partPrice[]" id="partPrice" value="<?php echo $partPrice; ?>" size="10" onKeyPress="return disableEnterKey(event)" />
    </td><td><input name="hours[]" id="hours" value="<?php echo $hours; ?>" size="10" onKeyPress="return disableEnterKey(event)" />
    </td><td><select name="rate[]" id="rate" onKeyPress="return disableEnterKey(event)">
    <?php
        //Connect to mysql db and retrieve the rate options  
    ?>
    </select>
    </td><td><!--<span class="amount"></span>--><input name="total[]" id="total" size="10" class="amount" onKeyPress="return disableEnterKey(event)" />
    </td><td align="center"><input type="checkbox" name="approved[]" id="approved" value="<?php echo $approved; ?>" size="10" onKeyPress="return disableEnterKey(event)" />
    </td><td align="center"><img src="img/plus.png" width="25" height="25" id="addButton" title="Add New Row" class="addRow" />
    </td><td align="center"><img src="img/x.png" width="25" height="25" id="removeButton" title="Remove Row" class="delRow" />
    </td></tr>
    </table>

我想要做的是让总字段显示数量x partPrice加上小时x率(从数据库中提取并在选择中列出)。我更喜欢动态地这样做,以便它可以即时更新。我有添加和删除按钮,因此我们可以根据需要添加任意数量的行。

我还希望在页面底部有一个总计 - 但只有在点击“已批准”时才添加每行。

我一直试图做的,至少暂时是这个jquery:

     $('#hours').blur(function() {
        $('tr').each(function(){
            var total = 0;
            total = parseFloat($(this).find('input[name=quantity]').val());
            $(this).find('.amount').val(parseFloat(total));
        });
     });

这使NaN成为现实,我无法弄清楚我做错了什么。我甚至没有进入批准复选框或最终总数。

此外,如果我在数字,价格和小时字段中打出数字之前添加动态行,则NaN将显示在每个总计中。这可能是因为我没有指定数组,它只是使用class =“amount”的所有字段(这是所有的总数)。

我可以做的是使用我的提交按钮,它将为任何和所有字段提取值,因此数据库输入不是问题 - 但动态计算总数似乎是。

我将不胜感激任何见解和帮助。

由于

2 个答案:

答案 0 :(得分:1)

尝试:

var total = 0;
$('tr').each(function(){

            total += parseFloat($(this).find('input[name=quantity[]]').val());
            $(this).find('.amount').val(parseFloat(total));
        });

希望有所帮助

答案 1 :(得分:0)

更改此行...

total = parseFloat($(this).find('input[name=quantity]').val());

...到...

total = parseFloat($(this).find('input[name=quantity]').val()) || 0;

否则空字符串上的parseFloat()将产生NaNNaN是有毒的,如果它在数学中的任何位置,它将始终产生NaN

您还需要在内部循环之外声明total,并且仅在结尾处(循环外部)设置值。