0

JavaScript に特定の問題があります。値をコンソールに出力すると、すべてが正常に表示されます。しかし、html では、最初の項目を更新するよりも別の項目を選択するまで、古い値が表示されます。以下は、js および html コードです。

HTML

onmouseover="OrderItem.setTotalPrice(event,this,'{{ menu_item.id }}')"

JS

setTotalPrice:function(event,a_htmlCaller, a_iMenuItemID){      

    item_total = OrderItem.Topping._order_toppings.find(function(a_oOTopp){
            return parseInt(a_oOTopp.iid) == parseInt(a_iMenuItemID);}.bind(this));

    var total_price = 0.00;
    var base_price = parseFloat($('pz-mitem-p-'+a_iMenuItemID).value);          
    var _html = '<div class="tot-price-item"><b>Item Price</b>: ';

    if(item_total){         
        // go into item details but with no changes     
        if(item_total.toppings.tot_price.length == 1 && item_total.toppings.tot_price[0].length == 0){                                      
            total_price += base_price;
            _html += '' + total_price;      
        }else{                          
            for(var i=0; i < item_total.toppings.tot_price.length; i++){

            //  total_price += parseFloat(item_total.toppings.tot_price[i][0]); 
                _html += '<div>' + (parseFloat(item_total.toppings.tot_price[i][0]).toFixed(2)).toString() + '</div>';          


            }               
        }       

    }else{          
        total_price += base_price;
        _html += '' + total_price;  
    }
    _html += '</div>';      



    Tips.add(
        a_htmlCaller, 
        event,                              
        _html,
        {
            className:'rounded',
            stem: true, 
            tipJoint: [ 'left', 'middle' ], 
            target:a_htmlCaller,    
            targetJoint: null//[ 'right', 'right' ]
        }
    );          

},      

編集: コメントでアスカーによって与えられたコードを追加しました。フォーマットを追加しました。

ヒント: コメントにコードを投稿する代わりに、元の質問に編集として投稿してください。書式設定がまったくないコメントで混乱するよりもはるかに読みやすくなります。

for(var i=0; i < item_total.toppings.tot_price.length; i++) { 
    //total_price += parseFloat(item_total.toppings.tot_price[i][0]);
    _html += '<div>' + (parseFloat(item_total.toppings.tot_price[i][0]).toFixed(2)).toString() + '</div>';
    test = parseFloat(item_total.toppings.tot_price[i][0]).toFixed(2);
    console.log(test);
}
4

1 に答える 1