jquery通过输入并添加它们
有人帮我创建了一个jquery代码片段,根据税率自动计算表单输入。现在,我试图找出如何循环处理每个输入,将它们添加到一起,然后在特定的表td中输出它们 我尝试了一下,尝试将子项合计、税一合计、税二合计和销售税合计相加,但没有成功。我还想把每一行的总数记在右边。我一点也不知道该怎么做 这是我正在研究的JSFIDLEjquery通过输入并添加它们,jquery,forms,input,each,Jquery,Forms,Input,Each,有人帮我创建了一个jquery代码片段,根据税率自动计算表单输入。现在,我试图找出如何循环处理每个输入,将它们添加到一起,然后在特定的表td中输出它们 我尝试了一下,尝试将子项合计、税一合计、税二合计和销售税合计相加,但没有成功。我还想把每一行的总数记在右边。我一点也不知道该怎么做 这是我正在研究的JSFIDLE 完善-->当您应该使用$(this)时,您正在使用this引用each循环中的当前输入字段 此外,您应该将所有输入值解析为float,在当前的fiddle中,您只是在连接字符串 当您应
完善-->当您应该使用$(this)时,您正在使用this引用each循环中的当前输入字段 此外,您应该将所有输入值解析为float,在当前的fiddle中,您只是在连接字符串
当您应该使用$(this)时,您正在使用this引用each循环中的当前输入字段 此外,您应该将所有输入值解析为float,在当前的fiddle中,您只是在连接字符串
您正在对字符串使用
.toFixed
方法(添加3倍的.val()
)。将这些字符串转换为数字。另外,您忘记在最后一个输入元素上使用.val()
,位于var row\u total=..
var row_total = (parseInt($inputs.eq(1).val(), 10)
+ parseInt($inputs.eq(2).val(), 10)
+ parseInt($inputs.eq(3).val(), 10)).toFixed(2);
最后,将所有出现的this.val()
替换为this.value
(或$(this.val()
)
Fiddle:您正在对字符串使用
.toFixed
方法(添加3倍的.val()
)。将这些字符串转换为数字。另外,您忘记在最后一个输入元素上使用.val()
,位于var row\u total=..
var row_total = (parseInt($inputs.eq(1).val(), 10)
+ parseInt($inputs.eq(2).val(), 10)
+ parseInt($inputs.eq(3).val(), 10)).toFixed(2);
最后,将所有出现的this.val()
替换为this.value
(或$(this.val()
)
小提琴:看看这个。我已经部分重写了你的代码。也许它会对你有用: 代码: 此处主要计算:
function CalculateData()
{
var price = parseFloat($(this).val());
var tax_one_rate = parseFloat($('[name="tax_one_rate"]').val()),
tax_two_rate = parseFloat($('[name="tax_two_rate"]').val()),
sales_tax_rate = parseFloat($('[name="sales_tax_rate"]').val());
var $tr = $(this).parent().parent();
$tr.find('td input[name="tax_one[]"]').val((tax_one_rate * 0.01 * price).toFixed(2));
$tr.find('td input[name="tax_two[]"]').val((tax_two_rate * 0.01 * price).toFixed(2));
$tr.find('td input[name="sales_tax[]"]').val((sales_tax_rate * 0.01 * price).toFixed(2));
var rowTotal = 0;
$tr.find('td:gt(1) input').each(function() {
rowTotal += parseFloat($(this).val());
});
$tr.find('#row_total').text((price - rowTotal).toFixed(2));
CalculateTotal();
}
看看这个。我已经部分重写了你的代码。也许它会对你有用: 代码: 此处主要计算:
function CalculateData()
{
var price = parseFloat($(this).val());
var tax_one_rate = parseFloat($('[name="tax_one_rate"]').val()),
tax_two_rate = parseFloat($('[name="tax_two_rate"]').val()),
sales_tax_rate = parseFloat($('[name="sales_tax_rate"]').val());
var $tr = $(this).parent().parent();
$tr.find('td input[name="tax_one[]"]').val((tax_one_rate * 0.01 * price).toFixed(2));
$tr.find('td input[name="tax_two[]"]').val((tax_two_rate * 0.01 * price).toFixed(2));
$tr.find('td input[name="sales_tax[]"]').val((sales_tax_rate * 0.01 * price).toFixed(2));
var rowTotal = 0;
$tr.find('td:gt(1) input').each(function() {
rowTotal += parseFloat($(this).val());
});
$tr.find('#row_total').text((price - rowTotal).toFixed(2));
CalculateTotal();
}
谢谢你的回复。我已经修好了,但似乎还是不起作用。这很好,谢谢!您知道如何搜索下一个“#row_total”实例并更新该td吗?感谢您的回复。我已经修好了,但似乎还是不起作用。这很好,谢谢!你知道如何搜索下一个“#row_total”实例并更新该td吗?太棒了,谢谢!您不会碰巧知道如何只更新特定行的#行#总数,对吗?ID应该是唯一的。例如,使用
class=“row\u total”
,并使用$(this).parent()。下一步('.row\u total')
。太棒了,谢谢!您不会碰巧知道如何只更新特定行的#行#总数,对吗?ID应该是唯一的。例如,使用class=“row\u total”
,并使用$(this).parent().next('.row\u total')
。哇。这太棒了。我唯一不知道的是live()函数没有被使用。行将被动态添加到vai jquery中,当我们没有使用live()时,新行不会受到影响。另外,我如何将计算绑定到tax_one[]、tax_two[]、sales_tax[]以及价格[],而不是税率?请自由填写以将直接事件绑定更改为live
。关于第二个问题,您需要手动标记更改的字段(例如,通过属性)然后从AUT计算中排除这些字段,并且只从这些字段中删除gen值。您能解释一下这是怎么回事吗?-->这里的find('td:gt(1)input')错误:应该是find('td:gt(0)input')
-这意味着将跳过第一个td
元素<代码>gt大于。哇。这太棒了。我唯一不知道的是live()函数没有被使用。行将被动态添加到vai jquery中,当我们没有使用live()时,新行不会受到影响。另外,我如何将计算绑定到tax_one[]、tax_two[]、sales_tax[]以及价格[],而不是税率?请自由填写以将直接事件绑定更改为live
。关于第二个问题,您需要手动标记更改的字段(例如,通过属性)然后从AUT计算中排除这些字段,并且只从这些字段中删除gen值。您能解释一下这是怎么回事吗?-->这里的find('td:gt(1)input')错误:应该是find('td:gt(0)input')
-这意味着将跳过第一个td
元素<代码>gt大于。