【问题标题】:Javascript loop alert only first indexJavascript循环警报仅第一个索引
【发布时间】:2013-06-05 09:38:29
【问题描述】:

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

【问题讨论】:

  • alert(fld_length); 提醒什么?一些 HTML 代码也可能有助于发现问题。
  • 有支持的 HTML 吗?
  • alert(fld_length); 提醒8
  • 上面写着Uncaught TypeError: Cannot read property 'value' of null test.html:308。相应的 html 字段就像&lt;input type="hidden" name="ret_price_0" value="20" /&gt;&lt;input type="hidden" name="ret_price_1" value="20" /&gt; 等。第 308 行我在上面标记了问题
  • 您不应该在Number() 中包含以下变量:fld_length1fld_lengthtemp_totaltemp_total1cur_value - 它们已经是数字。您可以使用qtytemp_qtemp_p 来执行此操作,尽管在乘法中使用它们会隐式转换它们。

标签: javascript loops numbers


【解决方案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() 无处不在。

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 如果您使用浏览器的控制台进行调试,则不需要 try/catch 块。但无论哪种方式,这实际上都不能回答问题,因此应该作为评论发布。
    猜你喜欢
    • 1970-01-01
    • 2020-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-08
    相关资源
    最近更新 更多