我有一个函数用于获取连续特定字段的自动求和。
$(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_ * 请提出解决方案。提前谢谢。
答案 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)
我能想到的可扩展/跨浏览器解决方案是,为每个输入元素添加一个可以识别行/列索引的类。这样,您可以执行水平或垂直查询并执行任何操作。