Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/87.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 汇总输入值_Javascript_Jquery - Fatal编程技术网

Javascript 汇总输入值

Javascript 汇总输入值,javascript,jquery,Javascript,Jquery,我正在尝试使用jquery遍历所有“.invoice行”,并通过将“.amount input”div中的所有值相加生成一个总数 AJAX动态生成“.amount input”中的默认值,用户可以手动更改该值。我一直在尝试创建一个函数,以便每次使用AJAX输入新数据时,都会调用函数updateTotal(),该函数迭代所有非空的“amount input”值并重新计算总数。我在完成这件事上经历了一段非常艰难的时间,我非常感谢任何帮助 这是我目前为止的JQuery(伪代码) 函数updateTot

我正在尝试使用jquery遍历所有“.invoice行”,并通过将“.amount input”div中的所有值相加生成一个总数

AJAX动态生成“.amount input”中的默认值,用户可以手动更改该值。我一直在尝试创建一个函数,以便每次使用AJAX输入新数据时,都会调用函数updateTotal(),该函数迭代所有非空的“amount input”值并重新计算总数。我在完成这件事上经历了一段非常艰难的时间,我非常感谢任何帮助

这是我目前为止的JQuery(伪代码)

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