Javascript jQuery输入复选框选中冲突
我在表格中选中的复选框发生了一些非常奇怪的事情。 我已经在一个表格中构建了一个发票计算器,您可以看到它,我的目的是,一旦我自动检查输入(Iva或Irpef),它们就不会计算在总金额中。 正如您在我链接的示例中所看到的,如果您选中Irpef输入复选框,它工作得很好,Irpef不在总数中计算。问题是,我的输入复选框IVA的情况不同,为什么?代码完全相同 当我试着让它们分开工作时,没关系,两者都很好,所以看起来它们不能一起工作,可能是吗?发生了什么事?在这个问题上我需要你的帮助 谢谢 以下是与问题相关的代码:Javascript jQuery输入复选框选中冲突,javascript,jquery,checkbox,calculator,Javascript,Jquery,Checkbox,Calculator,我在表格中选中的复选框发生了一些非常奇怪的事情。 我已经在一个表格中构建了一个发票计算器,您可以看到它,我的目的是,一旦我自动检查输入(Iva或Irpef),它们就不会计算在总金额中。 正如您在我链接的示例中所看到的,如果您选中Irpef输入复选框,它工作得很好,Irpef不在总数中计算。问题是,我的输入复选框IVA的情况不同,为什么?代码完全相同 当我试着让它们分开工作时,没关系,两者都很好,所以看起来它们不能一起工作,可能是吗?发生了什么事?在这个问题上我需要你的帮助 谢谢 以下是与问题相关
function tally(selector) {
var total = 0;
$('p.editable_number').each(function() {
total += parseInt($(this).text()) || 0;
$('#subtotal').html(total);
if($("#iva").is(':checked')){
$('#subtotal').html((total).toFixed(2));
$('#total').html((total*0.00).toFixed(2));
$('#total1').html((total*0.15).toFixed(2));
$('#total2').html((total*0.85).toFixed(2));
}
else {
$('#subtotal').html((total).toFixed(2));
$('#total').html((total*0.21).toFixed(2));
$('#total1').html((total*0.15).toFixed(2));
$('#total2').html((total*1.06).toFixed(2));
}
if($("#irpef").is(':checked')){
$('#subtotal').html((total).toFixed(2));
$('#total').html((total*0.21).toFixed(2));
$('#total1').html((total*0.00).toFixed(2));
$('#total2').html((total*1.21).toFixed(2));
}
else {
$('#subtotal').html((total).toFixed(2))
$('#total').html((total*0.21).toFixed(2));
$('#total1').html((total*0.15).toFixed(2));
$('#total2').html((total*1.06).toFixed(2));
}
})
}
$('#irpef').change(function() {
tally('p#subtotal');
tally('p#total');
});
$('#iva').change(function() {
tally('p#subtotal');
tally('p#total');
});
试试这个,现在应该可以了。我想你试着做一个else-if,每件事都做几次而不是一次(每个函数)。 我添加了变量来跟踪总计/小计和vat/irpf。
each()
遍历所有p.editable\u number元素,因此您执行了几次相同的代码,每次都覆盖以前的结果,您得到了正确的结果,因为它是结束循环。现在,您只需获取一次值,然后计算相关小计、增值税、irpf和总值(基于是否检查增值税或irpf的条件)。您的“irpef”if/else正在设置与“iva”if/else相同字段的值,从而覆盖刚刚设置的值。另外,如果要对用户输入的值使用parseInt()
,则必须提供基数,否则如果用户输入前导零,则会出现错误的行为-因此,请使用parseInt($(this).text(),10)
。您将选择器传递给Tall,但不在任何地方使用它??如果/else正在被覆盖,那么我如何避免覆盖?好吧,现在它可以工作了,但不像我在链接的示例中所说的,当我检查Irpef时,Irpef不会被计算,Irpef金额变为0。感谢实际上最好的解决方案是在开始时Irpef和IVA的金额为0,当我检查时,他们会得到值百分比,并计算总金额,包括IVA和/或Irpeft。我想这就是你想要的效果。太好了,这很简单,你可以做到,你在开始时再次使用else设置0到Irpef和Iva的值,单击后,他们得到要计算的百分比…谢谢你的帮助我认为你不需要tally函数的选择器参数,因为您没有在这段代码的任何地方使用它。很高兴能帮上忙!