3

我有一个函数,我可以使用它连续获取特定字段的自动总和。

$(function () {

    $('#add_iaDetails_table').on('change', '[name=days_0]', function () {
        var $row = $(this).closest('tr');
        var $rate = $row.find('input[name=rate_0]');
        var $days = $row.find('input[name=days_0]');
        var $cost = $row.find('input[name=cost_0]');
        var rate = parseFloat($rate.val());
        var days = parseFloat($days.val());
        $cost.val(rate * days);
    });
});

但问题是我动态地附加表中的行,并且我也是字段的名称,例如。days_1,days_2.....rate_1,rate_2....

我的函数将仅计算与函数中给出的值匹配的第一行的自动总和。有什么方法可以匹配所有附加值,例如 days_* , rate_* 请提出解决方案。提前致谢。

4

5 回答 5

1

为了适应动态内容,我会更灵活地使用您的选择器;只需过滤以开头 days_的名称,然后在末尾动态获取该 ID。

像这样的东西:

$('#add_iaDetails_table').on('change', '[name^=days_]', function () {
    var name = $(this).attr('name');
    var nameId = name.substr(name.indexOf('_') + 1);

    var $row = $(this).closest('tr');
    var $rate = $row.find('input[name=rate_' + nameId + ']');
    var $days = $row.find('input[name=days_' + nameId + ']');
    var $cost = $row.find('input[name=cost_' + nameId + ']');
    var rate = parseFloat($rate.val());
    var days = parseFloat($days.val());
    $cost.val(rate * days);
});
于 2013-10-17T06:22:42.323 回答
1

你可以使用starts-with选择器,比如

$('#add_iaDetails_table').on('change', '[name^=days_]', function () {
        var uid = $(this).attr("name").split("_")[1]; //get the unique id from 'name' attribute
        var $row = $(this).closest('tr');
        var $rate = $row.find('input[name=rate_' + uid + ']');
        var $days = $row.find('input[name=days_' + uid + ']');
        var $cost = $row.find('input[name=cost_' + uid + ']');
        var rate = parseFloat($rate.val());
        var days = parseFloat($days.val());
        $cost.val(rate * days);
    });
于 2013-10-17T06:26:33.407 回答
1

jQuery 有一大堆不同的选择器

http://api.jquery.com/category/selectors/

根据您的问题,您可能需要Starts With精炼机

http://api.jquery.com/attribute-starts-with-selector/

$('#add_iaDetails_table').on('change', '[name=^days_]', function () { ... }
于 2013-10-17T06:26:51.173 回答
0

一个简单的

$(function () {

    $('#add_iaDetails_table').on('change', '[name=days_0]', function () {
        var $row = $(this).closest('tr');
        var $rate = $row.find('input[name*=rate_]');
        var $days = $row.find('input[name*=days_]');
        var $cost = $row.find('input[name*=cost_]');
        var rate = parseFloat($rate.val());
        var days = parseFloat($days.val());
        $cost.val(rate * days);
    });
});

可以在 * 表示您选择任何带有包含给定字符串的属性的输入的情况下工作,或者您可以使用 JQUERY 中的 startswith 选择器,在上面的代码中,您将* 替换为 ^

于 2013-10-17T06:29:27.277 回答
0

我能想到的可扩展/跨浏览器解决方案是,为每个输入元素添加一个可以识别行/列索引的类。通过这种方式,您可以进行水平或垂直查询并做任何您想做的事情。

于 2013-10-17T06:42:00.150 回答