Javascript 汇总输入值
我正在尝试使用jquery遍历所有“.invoice行”,并通过将“.amount input”div中的所有值相加生成一个总数 AJAX动态生成“.amount input”中的默认值,用户可以手动更改该值。我一直在尝试创建一个函数,以便每次使用AJAX输入新数据时,都会调用函数updateTotal(),该函数迭代所有非空的“amount input”值并重新计算总数。我在完成这件事上经历了一段非常艰难的时间,我非常感谢任何帮助 这是我目前为止的JQuery(伪代码)Javascript 汇总输入值,javascript,jquery,Javascript,Jquery,我正在尝试使用jquery遍历所有“.invoice行”,并通过将“.amount input”div中的所有值相加生成一个总数 AJAX动态生成“.amount input”中的默认值,用户可以手动更改该值。我一直在尝试创建一个函数,以便每次使用AJAX输入新数据时,都会调用函数updateTotal(),该函数迭代所有非空的“amount input”值并重新计算总数。我在完成这件事上经历了一段非常艰难的时间,我非常感谢任何帮助 这是我目前为止的JQuery(伪代码) 函数updateTot
函数updateTotal(){
var合计=0;
对于(i=0;i<$('.invoice line')。长度;i++){
if($('.amount input').eq(i).val()!=空){
总计+=$('.amount input').eq(i).val();
}
}
$('.total').val(“$”+总计);
}
加价
<?
for(i=0; i < 25; i++){
echo' <div class="invoice-line">
<div class="prod-id-cell"><input type="text" class="prod-id-input"></div>
<div class="amount-cell"><input class="amount-input" type="text" /></div>
</div>';
}
?>
<div class="total">$0.00</div>
$0.00
纯JS的基本语法如下:
var inputs = document.getElementsByClassName("amount-input");
var total = 0;
inputs.forEach(function (input) {
total += value;
});
function updateTotal(){
var total=0;
for(i=0; i < $('.invoice-line').size(); i++){
currentAmount = Number($('.amount-input').eq(i).val().replace(/[^0-9\.]+/g,""));
total += currentAmount;
}
$('.total-number').text("$" + total.toFixed(2));
}
这样做的目的是获得感兴趣的所有输入的集合,然后使用外部变量将这些值相加。如果您想将其扩展为包括其他输入,那么可以使用带有CSS查询选择器的
document.queryselectoral(“”
)来获取集合。(这与jQuery$(“”)选择语法相同。)确保缓存jQuery选择,否则将执行50次DOM遍历,而不是1次:
var total=0, amounts = $('.amount-input'), len = amounts.length;
for(var i=0; i < len; i++){
total += +amounts[i].value;
}
像这样的方法应该会奏效:
function updateTotal() {
var total = 0;
$('.invoice-line').each(function (i, elem) {
total += parseFloat($(elem).find('.amount-input').val(), 10) || 0;
});
$('.total').val("$" + total);
}
每次单独更新输入元素时,可以使用change事件更新总量。下面是一个简单的例子: HTML:
您可以看到它正在工作。发布后不久,我就能够提出自己的解决方案,如下所示:
var inputs = document.getElementsByClassName("amount-input");
var total = 0;
inputs.forEach(function (input) {
total += value;
});
function updateTotal(){
var total=0;
for(i=0; i < $('.invoice-line').size(); i++){
currentAmount = Number($('.amount-input').eq(i).val().replace(/[^0-9\.]+/g,""));
total += currentAmount;
}
$('.total-number').text("$" + total.toFixed(2));
}
函数updateTotal(){
var合计=0;
对于(i=0;i<$('.invoice line').size();i++){
currentAmount=数字($('.amount input').eq(i).val().replace(/[^0-9\.]+/g,”));
合计+=当前金额;
}
$('.total number').text(“$”+total.toFixed(2));
}
$('.invoice').change(function() {
var total = 0;
$('.invoice').each(function() {
total += parseFloat($(this).val());
});
$('#total').text(total);
});
function updateTotal(){
var total=0;
for(i=0; i < $('.invoice-line').size(); i++){
currentAmount = Number($('.amount-input').eq(i).val().replace(/[^0-9\.]+/g,""));
total += currentAmount;
}
$('.total-number').text("$" + total.toFixed(2));
}