Javascript循环警报只针对第一个索引

Javascript loop alert only first index

本文关键字:第一个 索引 循环 Javascript      更新时间:2023-09-26

我有一个像下面这样的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);发出警报。假设是id = 3,根据我的逻辑,应该是如qty_1qty_2qty_4qty_5qty_6等。但它只提醒qty_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结束,但你的循环从1fld_length。)

作为题外话:你已经对Number()方法太着迷了——你不需要在已经包含数字的变量上使用它。应该在用户输入的值上使用(如果用户输入的不是数字,则应该考虑显示错误消息),因为当您获得带有.value的输入文本时,它以字符串的形式出现,但您不需要到处都使用Number()

for循环中可能发生异常,导致循环过早终止。可以尝试将代码块放入try/catch的循环中,这样您就可以知道哪里出了问题。