我正在尝试使用jQuery val()
$('[name="paytype1"]').change(function(){
var total = big_total();
total = parseFloat(total);
total = total.toFixed(2);
console.log(total);
if(isNaN(total)) {
alert(total);
}
$('[name="pay1amt"]').val(total);
})
浏览器中显示的所有内容都是NaN
。
正在运行console.log(total)
会显示一个数字,例如61.00,没有触发警报。
big_total()
函数正确返回数字(它根据其他输入字段中的数字计算)。
function big_total() {
var big_total = 0;
$('.total').each(function(i){
big_total = big_total + parseFloat($(this).val());
});
big_total = big_total.toFixed(2)
return big_total;
}
在ajax调用之后,通过jQuery动态地将具有类total的输入添加到页面中。这是插入的html:
<div class="grid_12 alpha omega line-items">
<div class="grid_1">CH02<input type="hidden" name="item_code[]" value="CH02">
<input type="hidden" name="item_id[]" value="1458">
</div>
<div class="grid_3">
DVA Regular consult
<input type="hidden" name="item_desc[]" value="Subsequent consultation">
<input type="hidden" name="type[]" value="Service">
</div>
<div class="grid_1">
<input type="text" size="3" name="qty[]" value="1" class="qty" max-length="3">
</div>
<div class="grid_2">
<input type="text" size="7" name="sub_total[]" value="61.00" class="sub-total">
</div>
<div class="grid_1">
<select name="tax[]">
<option value="$taxitems[ID]">0%</option>
<option value="$taxitems[ID]">10%</option>
</select>
</div>
<div class="grid_2">
<input type="text" size="7" name="total[]" value="61.00" class="total" readonly="">
</div>
<div class="grid_1 omega">
<div class="remove_stock_line"><img src="images/collapse.png"></div>
</div>
</div>
这是触发功能的下拉列表:
<div class="grid_8 alpha omega">
<div class="grid_3 alpha">
<select name="paytype1" class="pay_type">
<option default="" value="nill"></option>
<option value="cash">cash</option>
<option value="HICAPs">HICAPs</option>
<option value="EFTPOS">EFTPOS</option>
<option value="Visa">Visa</option>
<option value="Mastercard">Mastercard</option>
<option value="American Express">American Express</option>
<option value="Other card">Other card</option>
<option value="EFT">EFT</option>
<option value="Cheque">Cheque</option>
</select>
</div>
<div class="grid_3 omega">
<input type="text" size="10" name="pay1amt" value="" onclick="select();" class="pay_values">
</div>
</div>
思想?
答案 0 :(得分:1)
这是有效的
function big_total() {
var bg_total = 0;
$('.total').each(function(i){
bg_total = bg_total + parseFloat($(this).val());
});
big_total = bg_total.toFixed(2)
return bg_total;
}
$(document).ready(function(){
$("[name='paytype1']").change(function(){
var total = big_total();
total = parseFloat(total);
total = total.toFixed(2);
console.log(total);
if(isNaN(total)) {
alert(total);
}
$('input[name="pay1amt"]').val(total);
});
});
<强>更新强>
在big_total()
函数中,$('.total')
元素只是一个输出的类,其中一个是一个。为什么要使用$.each
$('.total').each(function(i){
big_total = big_total + parseFloat($(this).val());
});
//you can just replace the use of .each above to this in the big_total function, except you have special reason for that
bg_total = bg_total + parseFloat(".total").val());
<input type="text" size="7" name="total[]" value="61.00" class="total" readonly="">
当你在问题And all that is being shown in the browser is NaN. Running console.log(total) shows a number, e.g. 61.00, and no alert is being triggered.
.total
的输入值以非数字开头时,才会显示NaN。只有当你期望if(isNaN(total)) {alert(total);}
能够工作时才会这样。console.log(total)
显示值61.00因为big_total()函数正确地返回了数字,但如果您已经处理了(it calculates from numbers in other input fields)
除此之外,你的问题应该解决。
答案 1 :(得分:1)
此功能没有任何问题。但由于我们无法看到您的完整源代码,并且您尚未共享big_total
函数,因此我们只能进行推测。根据我的个人经验,我只看到两种可能的情况。
big_total()
返回非数字值或具有前导非数字字符$4339
,因为parseFloat()
忽略除句点(。)之外的尾随非数字字符,例如:{{1}不会给你一个错误。但由于您没有在控制台或警报中看到任何错误,因此可以排除这种情况。如果我是你,我会按照这些步骤进行调试
我会替换:
83483a;lsdfad
用:
var total = big_total()
如果您在var total = 1234.56;
中看到结果,则问题出在$('[name="pay1amt"]')
。如果您仍然看到NaN,那么我会查看代码中的其他位置以查看值被覆盖的位置。
这与问题无关,但非常重要。
不要在函数big_total
中使用变量名big_total
。当从堆栈中存储和检索它们时,Javascript不区分函数和变量。括号指示解释器执行函数,而没有括号指示解释器将其作为变量引用(不执行它)。
big_total()