2016-07-04 93 views
0

如何求和多个文本输入的值?根据现场输入计算总和

当前总和不正确,因为它不断记住和总结之前输入字段中的先前值。

我有以下代码:

HTML:

<div class="form-group"> 
    <legend>Risicopotentieel</legend> 
    <label for="email">Email address:</label> 
    <select class="selectpicker" id="selectpicker1"> 
    <option value="1">text1</option> 
    <option value="2">text2</option> 
    <option value="3">text3</option> 
    <option value="4">text4</option> 
    </select> 
    <label for="email">Email address:</label> 
    <select class="selectpicker" id="selectpicker2"> 
    <option value="1">text1</option> 
    <option value="2">text2</option> 
    <option value="3">text3</option> 
    <option value="4">text4</option> 
    </select> 
    <label for="email">Email address:</label> 
    <select class="selectpicker" id="selectpicker3"> 
    <option value="1">text1</option> 
    <option value="2">text2</option> 
    <option value="3">text3</option> 
    <option value="4">text4</option> 
    </select> 
</div> 

<div class="form-group"> 
    <legend>Score</legend> 
    <label for="email">&nbsp;&nbsp;</label> 
    <input type="text" class="form-control" id="scorefield1"> 
    <label for="email">&nbsp;&nbsp;</label> 
    <input type="text" class="form-control" id="scorefield2"> 
    <label for="email">&nbsp;&nbsp;</label> 
    <input type="text" class="form-control" id="scorefield3"> 
    <label for="email">Totaalscore</label> 
    <input type="text" class="form-control" name="riskpottotalscore" id="riskpottotalscore"> 
</div> 

jQuery代码首先复制所选择的选项的输入字段的值。这工作正常。此后,我想计算总和,那是错误的。可变totalPoints保持记忆的成绩,但我只是想对那些在得分字段1,2和3实际选择的值来计算的总和:

scorefieldrisk: function(){ 
    totalPoints = 0; 
    for (var i = 1; i <= 7; i++) { 
     (function (i) { 
      $('select[id$="selectpicker' + i + '"]').on("change", function() { 
       document.getElementById('scorefield'+i).value = this.value; 
       if(!isNaN(this.value) && this.value.length!=0) { 
        totalPoints +=(parseInt(this.value)); 
        document.getElementById('riskpottotalscore').value = totalPoints; 
       } 
      }); 
     })(i); 
    } 
}, 

回答

2

你应该从每次零重做总和。

您的代码可以简化为只有一个函数作为所有select元素的处理程序。您也可以使用统一的+运算符将字符串值转换为数字:

$('.selectpicker').on('change', function() { 
    totalPoints = 0; 
    $('.selectpicker').each(function() { 
     totalPoints += +this.value; 
    }); 
    $('#riskpottotalscore').val(totalPoints); 
});