我有一个类似下面的javascript函数:
function calculateBill(id,price)
{
var qty = document.getElementById('qty_'+id).value;
var cur_value =qty*price;
var frm_lngth = document.getElementById('bnfsendgoods').length;
var fld_length1 = Number(frm_lngth) - 10;
var counter = document.getElementById('cntr').value;
var fld_length = (Number(fld_length1)) / (Number(counter));
fld_length = Number(fld_length);
var temp_total = 0;
alert(fld_length);
for(var i = 1; i<=fld_length; i++)
{
if( i != id )
{
alert('qty_'+i); //line 301,alerts only qty_1
var temp_q = document.getElementById('qty_'+i).value;
var temp_p = document.getElementById('ret_price_'+i).value; //Line 308
var temp_total1 = temp_q*temp_p;
temp_total = Number(temp_total) + Number(temp_total1);
}
}
var final_total = Number(cur_value) + Number(temp_total);
document.getElementById('total').value = final_total;
}
在第301行,alert(fld_length);
提醒8。如果假设id = 3
,根据我的逻辑,它应该
提醒,例如qty_1
,qty_2
,qty_4
,qty_5
,qty_6
等。但它仅警告qty_1
。怎么了?
答案 0 :(得分:1)
根据您的评论,您有输入字段:
<input type="hidden" name="ret_price_0" value="20" />
<input type="hidden" name="ret_price_1" value="20" />
etc.
这些字段没有id
属性,但您试图通过id
选择它们:
var temp_p = document.getElementById('ret_price_'+i).value;
当document.getElementById('ret_price_'+i)
找不到具有指定id
的元素时,它会返回null
,然后null.value
会提供Uncaught TypeError: Cannot read property 'value' of null
。
分配适当的id
属性,您的代码应该有效。 (请注意,我注意到您的输入name
属性以0
结尾,但您的循环从1
变为fld_length
。)
顺便说一句:你已经开始使用Number()
方法了 - 你不需要在已经包含数字的变量上使用它。你应该在用户输入的值上使用它(如果用户输入的不是数字,你应该考虑显示错误信息),因为当你得到.value
的输入文本时它以字符串形式出现,但您无需在任何地方Number()
。
答案 1 :(得分:0)
for循环中可能发生异常,导致循环过早终止。可以尝试将代码块放在try / catch的循环中,这样你就可以知道出了什么问题。