我想找到在数组中传递字段值的总和。如果该字段是折扣,则执行减去其他加号。出于某种原因,我得到了南。
<script>
var partial_cost = $('#bill_amount:disabled').val();
var fine = +$('#fine').val();
var discount = +$('#discount').val();
var other_cost = +$('#other_cost').val();
var total_cost = +$('#total').val();
var chargeAble = [
partial_cost,
fine,
discount,
other_cost
];
$.each(chargeAble, function (chargeIndex, charge) {
charge.blur(function () {
var amount = 0;
for(charge in chargeAble)
if(chargeAble[charge].attr('id') == 'discount')
amount -= (chargeAble[charge].val());
else
amount += (chargeAble[charge].val());
total_cost.val(amount);
});
});
</script>
答案 0 :(得分:0)
我可以看到这样的东西:
var fine = +$('#fine');
jQuery()
方法返回jQuery
个对象,而不是数字甚至字符串。因此,强制数字强制转换将返回NaN
。
您需要首先抓取内部文本,然后解析它的数字。如何做到这取决于HTML的结构,但一般来说:
.val()
.text()
答案 1 :(得分:0)
代码使用.each()
和for-in循环的组合......奇怪的是来自blur()
函数的回调?它可以像这样简化:
var amount = 0;
$('#bill_amount:disabled, #fine, #discount, #other_cost')
.blur()
.each(function() {
var sign = this.id === 'discount' ? -1 : 1;
amount += parseFloat($(this).val()) * sign;
});
$('#total').val(amount);
更新
哦,你希望总计更新模糊...试试这段代码:
var $values = $('#bill_amount:disabled, #fine, #discount, #other_cost');
$values.on('blur', function() {
var amount = 0;
$values.each(function(){
var sign = this.id === 'discount' ? -1 : 1;
amount += parseFloat($(this).val()) * sign;
});
$('#total').val(amount);
});
答案 2 :(得分:0)
确保所有值都被JavaScript解释为数字。否则它将尝试从字符串计算一些奇怪的结果,这可能被解释为除了十进制数字(十六进制,八进制,......)之外的其他内容。
答案 3 :(得分:0)
你的数组包含数字,你就像它们是字符串一样
var chargeAble = [ //this holds values
partial_cost,
fine,
discount,
other_cost
];
并在循环中使用它作为id ???
chargeAble[charge].attr('id')