在js函数中使用通配符

时间:2013-10-17 06:18:10

标签: javascript jquery

我有一个函数用于获取连续特定字段的自动求和。

$(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 ....

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

5 个答案:

答案 0 :(得分: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);
});

答案 1 :(得分: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);
    });

答案 2 :(得分: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 () { ... }

答案 3 :(得分: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选择器在上面的代码中替换 * by ^

答案 4 :(得分:0)

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