0

我有一个如下的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。怎么了?

4

2 回答 2

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但您的循环从1to 开始fld_length。)

顺便说一句:你对这个方法太过分了Number()——你不需要在已经包含数字的变量上使用它。您应该在用户输入的值上使用它(如果用户输入的不是数字,您应该考虑显示错误消息),因为当您获得输入文本时,.value它以字符串形式出现,但您不需要Number() 到处。

于 2013-06-05T09:57:35.797 回答
0

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

于 2013-06-05T09:44:01.227 回答