Javascript 动态字段-总计添加-每行

Javascript 动态字段-总计添加-每行,javascript,jquery,Javascript,Jquery,我有一个问题,我希望有人能帮助我。我发布了一个类似的问题,但在新问题上没有进一步的帮助,所以我想我会发布这个问题,如果这是禁忌的话,很抱歉 <table border="1" class="autoTable"> <tr> <td>Description</td><td>Stocked</td><td>Quantity</td><td>Part Price</td&g

我有一个问题,我希望有人能帮助我。我发布了一个类似的问题,但在新问题上没有进一步的帮助,所以我想我会发布这个问题,如果这是禁忌的话,很抱歉

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

<td>Description</td><td>Stocked</td><td>Quantity</td><td>Part Price</td>
<td>Hours</td>    
<td>Rate Class</td><td>Total</td><td>Approved</td><td>Add New Row</td>    
<td>Remove Row</td></tr>
<tr>
<td><input name="description[]" id="description" value="<?php echo $description; ?>" size="55" class="numeric add_to_total" onKeyPress="return disableEnterKey(event)" />

</td><td align="center"><input type="checkbox"  name="stocked[]" id="stocked" value="<?php echo $stocked; ?>" size="5" class="numeric add_to_total" onKeyPress="return disableEnterKey(event)" />
</td><td><input name="quantity[]" id="quantity" value="<?php echo $quantity; ?>" size="5" class="numeric add_to_total quantity" onKeyPress="return disableEnterKey(event)" />
</td><td><input name="partPrice[]" id="partPrice" value="<?php echo $partPrice; ?>" size="10" class="numeric add_to_total part" onKeyPress="return disableEnterKey(event)" />
</td><td><input name="hours[]" id="hours" value="<?php echo $hours; ?>" size="10" class="numeric add_to_total hours" onKeyPress="return disableEnterKey(event)" />
</td><td><select name="rate[]" id="rate" class="numeric add_to_total rate" onKeyPress="return disableEnterKey(event)">
<?php
    //php code here for rates
?>
</select>
</td><td><input name="total[]" id="total" size="10" class="numeric is_total" 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>
我希望有人能帮助我…我已经尝试了我能想到的一切,我真的想解决这件事,继续我的生活:


提前感谢。

我不知道这些类在HTML中添加了“总计”、“数量”、“部分”、“小时数”、“费率”或“总计”,或者您试图在Javascript中选择哪些元素……希望这对您有所帮助

编辑:

再想想,这可能是因为新添加的行的add_to_total classed元素没有绑定到更改事件。您是否考虑过根据您使用的jQuery版本使用.live/.on jQuery事件

jQuery<1.7

jQuery>=1.7

可能实现了类似这样的功能:

// using the .live() event...
$(".add_to_total").live('change', function(){ ... });

// using the .on() event...
$(".add_to_total").on('change', function(){ ... });
编辑:

哈哈!希望是最后一次编辑!那么,考虑到以下代码:

var quantity = parseFloat($(".quantity").val()) || 0;
这将始终返回第一个$.quantity的值,尽管实际上选择了一组元素…这只是jQuery中.val函数的功能。您要做的是处理每一行的计算,如您所说。简而言之,您需要获取当前add_to_total的TR元素,只关注其子元素,然后继续

显然,这是在处理大量不必要的计算,我建议在需要在其上运行计算并直接循环的每一行中添加一个类,而不是:

<tr class="dynamic_row"> ... </tr>

希望这有帮助!:

多亏了克里斯的建议,我移动了行。find.is_total.valtotal; 关联到该行。在他的建议中,他把它放在声明它的元素之外,所以我认为函数不知道我们在谈论什么

我也改变了主意 $.add_to_total.change函数{ 致: $.add_to_total.live'change',function{以使其在每次发生时都起作用,正如我从他的编辑3中了解到的那样

因此,计算总数的最后一个函数是:

$(".add_to_total").live('change',function() {
    var total = 0;
    $(".dynamic_row").each(function() {
        var row = $(this);
        var quantity = parseFloat(row.find(".quantity").val()) || 0;
        var part = parseFloat(row.find(".part").val()) || 0;
        var hours = parseFloat(row.find(".hours").val()) || 0;
        var rate = parseFloat(row.find(".rate").val()) || 0;
        total = (Number(quantity) * Number(part)) + (Number(rate) * Number(hours));
        row.find(".is_total").val(total);
    });
});
由于我对Stack Overflow是一个相对较新的新手,我不确定如何给他任何信任,除了接受他的答案,并提升有用的选项


非常感谢!

也许我完全错过了它,但我看不出你的JavaScript应该处理什么输入。不清楚你在这里想做什么。你到底想要什么总数?@WillSam如果你之前的问题已经解决,请触摸左边的绿色勾号,将其标记为接受我编辑了表格。谢谢。是的,那太傻了…我发布的时候在玩代码。这就是我在表格中使用的类。谢谢你的帮助。不,我似乎不能做的是,当我使用jquery.table.addrow.js插件使用我的动态触发器向表格中添加另一行时,我无法获得总计。我似乎只能计算第一行,即页面加载时的第一行。我需要找到一种方法让jquery添加每行的总计…Re:Edit 2。在每个附加的动态行上输入字段之前,无法进行计算。无法预测接下来会发生什么,或者会有多少行。我ied是一个常规的onchange函数,但它不会解释动态行生成的值数组。我不在乎它必须是哪个字段,但我会尽我所能生成计算。Re:Edit 3。谢谢你坚持我的意见。我在发布上一条评论后做了更改。我更改了fi我的“函数”的第一行:$。将\添加到\总计。livechange,函数{现在,我在每个动态行总计中都得到了一个计算结果,但它是第一行总计的值。如果我能得到它来计算它自己的行的值,那么我就是黄金。关于如何实现这一点,有什么想法吗?我正在使用jquery 1.7.1。是的,根据您的编辑,第一个建议,使用live,将只向所有行添加与第一行总计相同的值后续行。在第二行或后续行中,On不会给我任何值。非常感谢您的接受!很高兴能够提供帮助!我将编辑我的答案,使其与在搜索中遇到此问题的其他人更相关…:
$(".add_to_total").on('change', function() {
    var total = 0;
    $(".dynamic_row").each(function() {
        var row = $(this);
        var quantity = parseFloat(row.find(".quantity").val()) || 0;
        var part = parseFloat(row.find(".part").val()) || 0;
        var hours = parseFloat(row.find(".hours").val()) || 0;
        var rate = parseFloat(row.find(".rate").val()) || 0;
        total = (Number(quantity) * Number(part)) + (Number(rate) * Number(hours));
    });
    row.find(".is_total").val(total);
});
$(".add_to_total").live('change',function() {
    var total = 0;
    $(".dynamic_row").each(function() {
        var row = $(this);
        var quantity = parseFloat(row.find(".quantity").val()) || 0;
        var part = parseFloat(row.find(".part").val()) || 0;
        var hours = parseFloat(row.find(".hours").val()) || 0;
        var rate = parseFloat(row.find(".rate").val()) || 0;
        total = (Number(quantity) * Number(part)) + (Number(rate) * Number(hours));
        row.find(".is_total").val(total);
    });
});