JavaScript使用了错误的文本框

时间:2018-12-30 00:56:04

标签: javascript jquery

我正在尝试使用Javascript计算。当我执行计算时,我可以看到脚本多次使用文本框。

例如:

第一行的计算是:

100 + 20 = 120

第二行的计算是:

100 + 0 = 100

总数应为 220

执行代码时,我总共得到 240

有人知道为什么我的脚本计算不正确吗?

JSFiddle:http://jsfiddle.net/pjybzg3t/

这是我的代码:

$(document).on('change', '[id^=neg_pos]', function selectQuantity(selectedValue) {
  let neg = 0
  let pos = 0

  $('[id^=neg_pos]').each(function(i, e) {
    var quantity = e.options[e.selectedIndex].value;

    if (quantity === '0') {

    } else if (quantity === '1') {
      var num1 = Number(document.getElementsByName('price[]')[0].value);
      var num2 = Number(document.getElementsByName('tax[]')[0].value);

      var tv1 = num1 + num2;
      pos += tv1;

    } else {
      var num3 = Number(document.getElementsByName('price[]')[0].value);
      var num4 = Number(document.getElementsByName('tax[]')[0].value);

      var tv5 = num3 + num4;
      neg += tv5;
    }

    document.getElementById('positive').value = pos.toFixed(2);
    document.getElementById('negative').value = neg.toFixed(2);

  });
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<input type="text" name="price[]" id="price1" onkeypress="return isNumber(event, this)" data-srno="1">
<input type="text" name="tax[]" id="tax1" onkeypress="return isNumber(event, this)" data-srno="1">
<select id="neg_pos1" name="neg_pos[]" data-srno="1" class="form-control">
  <option value="0"></option>
  <option value="1">+</option>
  <option value="2">-</option>
</select>
<br /><br />
<input type="text" name="price[]" id="price2" onkeypress="return isNumber(event, this)" data-srno="2">
<input type="text" name="tax[]" id="tax2" onkeypress="return isNumber(event, this)" data-srno="2">
<select id="neg_pos2" name="neg_pos[]" data-srno="2" class="form-control">
  <option value="0"></option>
  <option value="1">+</option>
  <option value="2">-</option>
</select>
<br /><br />
<input type="text" name="price[]" id="price3" onkeypress="return isNumber(event, this)" data-srno="3">
<input type="text" name="tax[]" id="tax3" onkeypress="return isNumber(event, this)" data-srno="3">
<select id="neg_pos3" name="neg_pos[]" data-srno="3" class="form-control">
  <option value="0"></option>
  <option value="1">+</option>
  <option value="2">-</option>
</select>
<br /><br /><br />

<input type="text" name="positive" id="positive" onkeypress="return isNumber(event, this)">
<input type="text" name="negative" id="negative" onkeypress="return isNumber(event, this)">

1 个答案:

答案 0 :(得分:2)

问题是您正在使用document.getElementsByName('price[]')[0].value来获取输入的值。但是该代码专门选择了第一个price[]元素,因此您始终使用相同的值。

您需要用[0]替换[i],因为i对应于相关的[id^=neg_pos]项目($('[id^=neg_pos]').each( function( i, e) { 中的)。

http://jsfiddle.net/pjybzg3t/1/上的演示已更新