我有下表
<table class="authors-list" border=0 id="ordertable">
<tr>
<td>Cubic Meters</td><td>Cubes per Bundle</td><td>Total Bundles</td>
<tr>
<td><input type="text" name="cubicmeters1" id="cubicmeters1" value="1.38"></td>
<td><input type="text" name="cubesperbundle1" id="cubesperbundle1" value="1.485"></td>
<td><input type="text" name="bundles1" id="bundles1"></td>
</tr>
<tr>
<td><input type="text" name="cubicmeters2" id="cubicmeters2" value="1.38"></td>
<td><input type="text" name="cubesperbundle2" id="cubesperbundle2" value="1.485"></td>
<td><input type="text" name="bundles2" id="bundles2"></td>
</tr>
<tr>
<td><input type="text" name="cubicmeters3" id="cubicmeters3" value="1.38"></td>
<td><input type="text" name="cubesperbundle3" id="cubesperbundle3" value="1.485"></td>
<td><input type="text" name="bundles3" id="bundles3"></td>
</tr>
</table>
我想要做的是遍历每个表行并对两个输入执行数学函数,并将结果填充到第三个输入中。
小提琴在这里:http://jsfiddle.net/ttZtX/1/
所以这是我对jquery的尝试:
$("table.authors-list").find('input[name^="cubicmeters1"]').each(function () {
cubes += +$(this).closest('tr').find('input[name^="cubicmeters"]').val();
cubesperbundle += +$(this).closest('tr').find('input[name^="cubesperbundle"]').val();
+$(this).closest('tr').find('input[name^="bundles"]').val((cubes*cubesperbundle).toFixed(2));
});
这不会产生任何结果或错误,并且不会填充输入。
总结一下,我的要求是让jquery循环遍历每一行,将cubicmeters
乘以cubesperbundle
并将bundles
填入结果。
很简单,但我不能正确。
任何帮助都将不胜感激。
提前致谢...
答案 0 :(得分:3)
这是你在找什么? http://jsfiddle.net/WrvmW/
$("table.authors-list tr").each(function () {
var cubes = parseFloat($('input[name^="cubicmeters"]',this).val(), 10);
var cubesperbundle = parseFloat($('input[name^="cubesperbundle"]',this).val(), 10);
$('input[name^="bundles"]',this).val((cubes*cubesperbundle).toFixed(2))
});
您的javascript
中存在一些错误,您需要parseFloat
才能执行操作。另一件事是你不必通过each
输入并找到closest
来使其复杂化。您可以直接遍历tr
s。
答案 1 :(得分:3)
您在小提琴中选择了No wrap - in <head>
,因此尚未创建您尝试选择的元素,请尝试将其更改为onDomready
同时删除1
中的$("table.authors-list").find('input[name^="cubicmeters1"]')
以选择所有输入而不只是一个,并在变量之前添加var
,以便它们不会泄漏到全局范围
$("table.authors-list").find('input[name^="cubicmeters"]').each(function () {
var cubes = +$(this).closest('tr').find('input[name^="cubicmeters"]').val();
var cubesperbundle = +$(this).closest('tr').find('input[name^="cubesperbundle"]').val();
$(this).closest('tr').find('input[name^="bundles"]').val((cubes*cubesperbundle).toFixed(2));
});
答案 2 :(得分:1)
您的javascript中出现错误:
$("table.authors-list").find('input[name^="cubicmeters1"]').each(function () {
// you haven't declared cubes
// you have a + in front of $
// you're not parsing the string (use parseFloat)
cubes += +$(this).closest('tr').find('input[name^="cubicmeters"]').val();
cubesperbundle += +$(this).closest('tr').find('input[name^="cubesperbundle"]').val();
+$(this).closest('tr').find('input[name^="bundles"]').val((cubes*cubesperbundle).toFixed(2));
});
以下内容应该有效:
$(function(){
$("table.authors-list").find('input[name^="cubicmeters1"]').each(function () {
var cubes;
var cubesperbundle;
cubes = parseFloat($(this).closest('tr').find('input[name^="cubicmeters"]').val());
cubesperbundle = parseFloat($(this).closest('tr').find('input[name^="cubesperbundle"]').val());
$(this).closest('tr').find('input[name^="bundles"]').val((cubes*cubesperbundle).toFixed(2));
});
});
答案 3 :(得分:1)
当然,如果由于某些原因(如更复杂的计算)而更改表结构,则总会有另一种方法,例如使用id选择器解决问题。你可以在以下地址看到它:
或在这里
$('input[name^="bundles"]').each(function () {
var id = $(this).attr('id').replace("bundles", "");
var cubes = +$("#cubicmeters" + id).val();
var cubesperbundle = +$("#cubesperbundle" + id).val();
$(this).val((cubes*cubesperbundle).toFixed(2));
});
其中每个捆绑包已经携带了其ID号,因此您可以找到相关数量的项目并将其添加到计算逻辑中。