jquery通过输入并添加它们

jquery通过输入并添加它们,jquery,forms,input,each,Jquery,Forms,Input,Each,有人帮我创建了一个jquery代码片段,根据税率自动计算表单输入。现在,我试图找出如何循环处理每个输入,将它们添加到一起,然后在特定的表td中输出它们 我尝试了一下,尝试将子项合计、税一合计、税二合计和销售税合计相加,但没有成功。我还想把每一行的总数记在右边。我一点也不知道该怎么做 这是我正在研究的JSFIDLE 完善-->当您应该使用$(this)时,您正在使用this引用each循环中的当前输入字段 此外,您应该将所有输入值解析为float,在当前的fiddle中,您只是在连接字符串 当您应

有人帮我创建了一个jquery代码片段,根据税率自动计算表单输入。现在,我试图找出如何循环处理每个输入,将它们添加到一起,然后在特定的表td中输出它们

我尝试了一下,尝试将子项合计、税一合计、税二合计和销售税合计相加,但没有成功。我还想把每一行的总数记在右边。我一点也不知道该怎么做

这是我正在研究的JSFIDLE


完善-->

当您应该使用$(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大于。