我有一个问题,我希望有人遇到过,可以提供帮助。我发布了一个类似的问题(已解决),但对新问题没有进一步的帮助,所以我想我会发布这个问题(对不起,如果这是禁忌)。
<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>
我使用以下代码来累加总行,但它不适用于第二行和后续动态行。
$(".add_to_total").change(function() {
var total = 0;
$(".add_to_total").each(function() {
var quantity = parseFloat($(".quantity").val()) || 0;
var part = parseFloat($(".part").val()) || 0;
var hours = parseFloat($(".hours").val()) || 0;
var rate = parseFloat($(".rate").val()) || 0;
total = (Number(quantity) * Number(part)) + (Number(rate) * Number(hours));
});
$(".is_total").val(total);
});
我希望有人可以帮助我......我已经尝试了所有我能想到的东西,而且我真的希望解决这个问题,继续我的生活:)
提前致谢。
答案 0 :(得分:1)
我看不到您的HTML中的add_to_total
,quantity
,part
,hours
,rate
或is_total
类。 ,或者你试图在你的Javascript中选择哪些元素...希望这有帮助......
修改强> 的
再次考虑它,可能是由于新添加的行'add_to_total
分类元素而不是被绑定到更改事件。您是否考虑过使用.live()
/ .on()
jQuery事件(取决于您使用的jQuery版本)?
http://api.jquery.com/live/(jQuery&lt; 1.7)
http://api.jquery.com/on/(jQuery&gt; = 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")
的值,尽管实际上选择了一组元素...这只是.val()
函数的功能。 jQuery的。你要做的就是为每一行进行流程计算,就像你说的那样。简化后,您需要获取当前TR
的{{1}}元素,只关注其子元素,然后继续。
显然这正在处理大量不必要的计算,我建议在每个需要对它们进行计算的行中添加一个类,然后直接循环它们:
add_to_total
然后在Javascript中:
<tr class="dynamic_row"> ... </tr>
希望这有帮助! :)
答案 1 :(得分:0)
感谢Chris的建议,我将row.find(".is_total").val(total);
关联到该行。在他的建议中,他把它放在声明它的元素之外,所以我认为这个函数不知道我们在说什么。
我也改变了
$(".add_to_total").change(function() {
于:
$(".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的新手,我不知道如何给予他任何功劳,除了接受他作为已接受的答案,并提升有用选项。
非常感谢!