Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/397.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在js函数中使用通配符_Javascript_Jquery - Fatal编程技术网

Javascript 在js函数中使用通配符

Javascript 在js函数中使用通配符,javascript,jquery,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

我有一个函数,使用它我可以得到一行中特定字段的自动求和

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

这里我的函数只计算与函数中给定值匹配的第一行的自动求和。 是否有任何方法可以匹配所有附加值,如天数、费率_*
请提出解决办法。提前感谢。

为了适应动态内容,我会更灵活地使用您的选择器;只需筛选以
天开始的名称
,然后在末尾动态获取该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);
});
您可以使用选择器,如

$('#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);
    });

jQuery有一大堆不同的选择器

根据您的问题,您可能希望
细化器开头

简单的

$(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选择器,在上面的代码中,您用^替换*,我能想到的可扩展/跨浏览器解决方案是,为每个输入元素添加一个可以标识行/列索引的类。通过这种方式,您可以执行水平或垂直查询,并执行任何您想要的操作

我的荣幸,@Elvin-祝你好运。
$(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);
    });
});