1

我有一个贯穿表格的脚本,并不理想,但我需要让它工作。

表字段cubicmeterscubesperbundle由较早的脚本填充。

我需要做的是,现在循环遍历表格并对每一行的输入执行数学函数。

我有一个rows具有行数的变量,可用于引用每一行的变量 I。

for (var i = 1; i <= rows; i++) {

            var cubes = +$(this).closest('tr').find('input[name^="cubicmeters"+i]').val(); // reference the row 'i'
            var cubesperbundle = +$(this).closest('tr').find('input[name^="cubesperbundle"]').val();
            $(this).closest('tr').find('input[name^="bundles"]').val((cubes*cubesperbundle).toFixed(2));

}

有几点需要注意,这个查询不在头部,而是在页面底部的脚本标签内。原因是该表是用 PHP 填充的,因此 head 脚本将在加载输入之前运行。因此,我将此脚本放在页面底部。此外,填充的 jquerycubicmeterscubesperbundle在 PHP 填充输入cubicmeterscubesperbundle回复要填充的输入之后运行。

所以命令:PHP 填充一个productcode. jquery(从页面底部调用cubicmeterscubesperbundle基于productcode. 这一切都必须在加载页面时发生,而无需任何用户触发器。

最后,我需要 jquery 脚本用*bundles的结果填充字段cubesperbundlecubicmeters

这个脚本必须运行之前我的html是:

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

jsfiddle 在这里:http: //jsfiddle.net/WfemC/

这显然是行不通的,因此我的问题。

谢谢你的帮助。

更新

for (var i = 1; i <= rows; i++) {
    (function (index) {
        $.post('get_sku_cubes', {
            data: $('#product' + index).val()
        }, function (result) {
            $('#cubicmeters+ index).val(result);
        });
    })(i)
}

for (var i = 1; i <= rows; i++) {
    (function (index) {
        $.post('get_cubesperbundle, {
            data: $('#product' + index).val()
        }, function (result) {
            $('#cubesperbundle+ index).val(result);
        });
    })(i)
}


$('#ordertable tr').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^="totalbundles"]').val((cubes*cubesperbundle).toFixed(2));
});

谢谢

4

2 回答 2

1

您可以使用.each()jQuery 中的函数在每一行上循环,然后您可以$(this)在每个循环上使用以在当前行上工作。

小提琴的例子。

编辑: 用分离的功能更新了小提琴

于 2013-04-25T07:03:12.227 回答
1

You are doing it all wrong use .each() because for loop not getting $(this)

Working DEMO

EDIT

HTML

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

jQuery Code

$('#ordertable tr').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));
});
于 2013-04-25T06:46:42.570 回答