为什么在最后一个输入的值的开头有一个0?

时间:2016-09-23 18:37:48

标签: javascript

请参阅此代码。当我在.price.qty输入中输入一些数字时,如果t变量实际上是100,我会在0100中获得.total输入。为什么第一个中有0,我该如何解决?

$('.detail').delegate('.quantity, .price, .discount', 'keyup', function() {
  var tr = $(this).parent().parent();
  var qty = tr.find('.quantity').val();
  var price = tr.find('.price').val();
  var amt = qty * price;
  tr.find('.amount').val(amt);
  total();
});

function total() {
  var t = 0;
  $('.amount').each(function(i, e) {
    var amt = $(this).val();
    t += amt;
  });
  $('.total').html(t);
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<table>
  <tbody class="detail">
    <tr class="row">
      <td>
        <input type="text" class="no" value="1">
      </td>
      <td>
        <input type="text" class="pid">
      </td>
      <td>
        <input type="text" class="productname">
      </td>
      <td>
        <input type="text" class="price">
      </td>
      <td>
        <input type="text" class="quantity">
      </td>
      <td>
        <input type="text" class="amount">
      </td>
    </tr>
    <tr>
      <td></td>
      <td></td>
      <td></td>
      <td></td>
      <td></td>
      <td><span class="total"></span></td>

    </tr>

  </tbody>
</table>

看到这个问题:https://jsfiddle.net/z5d421at/

2 个答案:

答案 0 :(得分:2)

您从该值读取的金额将被视为字符串。使用parseInt()

$('.detail').delegate('.quantity, .price, .discount', 'keyup', function() {
    var tr = $(this).parent().parent();
    var qty = tr.find('.quantity').val();
    var price = tr.find('.price').val();
    var amt = qty * price;
    tr.find('.amount').val(amt);
    total();
});

function total() {
    var t = 0;
    $('.amount').each(function(i, e) {
        var amt = parseInt($(this).val());
        t += amt;
    });
    $('.total').html(t);
}

答案 1 :(得分:2)

元素值始终是一个字符串,因此$(this).val()返回一个字符串,并且"0" + "100"返回"0100",因为它们是字符串。

您已将字符串强制转换为数字

var t = 0;
$('.amount').each(function(i, e) {
    var amt = +$(this).val();
    t += amt;
});