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);
});
});