在Javascript中计算类列表的值时遇到问题

在Javascript中计算类列表的值时遇到问题,javascript,jquery,Javascript,Jquery,我试图把q-total类中的所有值相加,但我无法让它工作。代码如下: $(document).on("change", ".row-inputs", function(){ var total = 0; var price = 0; var multi = 0; $('.q-quantity', this).each(function(){ multi = $(this).val(); }) $(".q-price", this).each(function(){ pric

我试图把q-total类中的所有值相加,但我无法让它工作。代码如下:

$(document).on("change", ".row-inputs", function(){
var total = 0;
var price = 0;
var multi = 0;


$('.q-quantity', this).each(function(){
    multi = $(this).val();
})

$(".q-price", this).each(function(){
    price += +$(this).val() * multi;
})

$(".q-total", this).val(price);

for (var i = 0; i < $(".q-total").length; i++) {
    // total = 0;
    // console.log($(".q-total", this).val() )
    total += parseInt($(".q-total", this).val());
}

console.log("Total " + total)

})
下面是我用来向html添加新行的类代码。在这种情况下,这可能有助于找出上述代码不起作用的原因

var counter = 1;
var limit = 10;
function addInput(divName){
     if (counter == limit)  {
          alert("You have reached the limit of adding " + counter + " 
inputs");
     }
     else {
          var newdiv = document.createElement('div');
          newdiv.className = "row-inputs";
          newdiv.innerHTML = "<input type='text' name='' 
          placeholder='product name' class='q-product-name'> " + 
          "<input type='number' name='' placeholder='0' class='q-quantity' 
          value=1> " +
          "<input type='text' name='' placeholder='price' class='q-price'> " 
          +
          "<input type='text' name='' placeholder='price' class='q-total'>";
          document.getElementById(divName).appendChild(newdiv);
          counter++;
     }
}

谢谢

您的循环不正确:

改变

在最初的for循环中,您从不迭代这些值,而是始终使用$this.val。不知道为什么你的方法不同。你在其他地方都使用过每种方法,但这是你的解决办法


为了进一步解释,请使用您的示例添加价格为3,4,5的行。第一次到第1行,jQuery集合中有一个元素,因此total=0变为total+=3;添加第二行,您有两个元素,但只查看当前行的值,因此total=0变为total+=4&&total+=4,因此total=8;在第三行更改中,有三个元素,总计=15 3*5

它在做什么不正确的事?你得到了一个错误的值吗?它会抛出错误吗?不,不是错误。但是总数与手动添加所有值不同。例如:3、4和5的3行等于12。但是应用程序给了我15。请加上你的HTML,我建议在把它加到总数时打印出来。您还可以检查html,看看那里的值是否正确
for (var i = 0; i < $(".q-total").length; i++) {
    // total = 0;
    // console.log($(".q-total", this).val() )
    total += parseInt($(".q-total", this).val());
}
  $(".q-total").each(function(){
    total += +$(this).val();
  })