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_2qty_4qty_5qty_6qty_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ますが、ループは から1に進みますfld_length。)

余談ですが、あなたはこのNumber()メソッドに夢中になりすぎました - 既に数値を含む変数に対して使用する必要はありません。ユーザーが入力した値に対して使用する必要があります(また、ユーザーが数値以外の何かを入力した場合はエラー メッセージを表示することを検討する必要があります)。入力テキストを取得すると.value文字列として表示されますが、必要はありません。Number() どこにでも。

于 2013-06-05T09:57:35.797 に答える
0

for ループで例外が発生し、ループが途中で終了する可能性があります。コード ブロックを try/catch のループ内に配置して、何が問題なのかを知ることができます。

于 2013-06-05T09:44:01.227 に答える