请参阅此代码。当我在.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>
答案 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;
});