Javascript循环警报只有第一个索引

时间:2013-06-05 09:38:29

标签: javascript loops numbers

我有一个类似下面的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_1qty_2qty_4qty_5qty_6等。但它仅警告qty_1。怎么了?

2 个答案:

答案 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的循环中,这样你就可以知道出了什么问题。