2010-12-02 10 views
0

継続経由で読み込ま。次のコードは、別のスクリプトからajax経由でロードされた値を計算します。別の形式の一連のオプションは、どの情報が読み込まれ、最終的な計算が行われるかを決定します。の計算値は、新たな問題点と解決ケースからjQueryの

問題では、すべての利用可能なオプションでロードされた後あなたがそれらをロードすることはできませんし、すべてのフィールドの合計を追加するスクリプトは、実際にはこの時点で失敗しないということです。たとえば、2つのオプションをロードすると、合計が増えます。 3分の1にロードすると、合計3個の合計が加算されます。1つのオプションを取り出すと、スクリプトが失敗します。私はそれがhttp://www.divethegap.com/update/diving-trips/adventure-training/#level_01でサンプルを動作するコード

var productIds = {}; 

function product_totals(id) { 
    productIds[id] = true; // store all id's as the totals are calculated 
    var quantity = $c('product_quantity_' + id).value; 
    var price = $c('product_price_' + id).value; 
    var duration = $c('product_duration_' + id).value; 
    var dives = $c('product_dives_' + id).value; 
    var hire = $c('product_hire_' + id).value; 
    Number($c('product_price_total_' + id).value = price * quantity); 
    Number($c('product_duration_total_' + id).value = duration * quantity); 
    Number($c('product_dives_total_' + id).value = dives * quantity); 
    Number($c('product_hire_total_' + id).value = hire * quantity); 

    function $c(id) { 
     return document.getElementById(id); 
    } 

    var totalPriceTotal = 0; 
    var totalDurationTotal = 0; 
    var totalDivesTotal = 0; 
    var totalHireTotal = 0; 
    for (var id in productIds) { 
     // multiply by 1 to make sure it's a number 
     totalPriceTotal += $c('product_price_total_' + id).value * 1; 
     totalDurationTotal += $c('product_duration_total_' + id).value * 1; 
     totalDivesTotal += $c('product_dives_total_' + id).value * 1; 
     totalHireTotal += $c('product_hire_total_' + id).value * 1; 
    } 
    $c('GT_total_price').value = totalPriceTotal; 
    $c('GT_total_duration').value = totalDurationTotal; 
    $c('GT_total_dives').value = totalDivesTotal; 
    $c('GT_total_hire').value = totalHireTotal; 

    function $c(id) { 
     return document.getElementById(id); 
    } 
} 

スクリプトは、製品ID var productIds = {};

すべてのヘルプはここ

をいただければ幸いです

—を取り出す方法とは何かされていると考えている(初心者をクリックしてください)多くのおかげで

答えて

0

私が理解しない場合は、どのようなあなたが達成しようとすると、あなたが計算できるように、項目を削除することができ、そこから配列内のIDのコレクションを積み重ねることです選択したオプションのみ。私はvar productIds = [];と宣言し、productIds.push(id)を使ってIDを追加します。オプションを削除すると、productids.splice(indexofId, 1);だけ使用できます。あなたは、あなたが欲しいidsを持っていることになるでしょう。

+0

並べ替え、それをかなりを行いますことはかなり確実ではありません。オプションは、右側にロードされているものを決定します。ロードされた商品には情報(価格など)が含まれています。オプションが選択解除されると、関連製品が右側からロードされます。上記のスクリプトは、右側の情報を計算しますが、製品がロードされたときにProductIDのコレクションは更新されません。何か案が。いくつかの点で、あなたのProductIdsコレクションを反復処理し、これらのIDを使用してアンロードコントロールを解決しようとすると、それはあなたのスクリプトを殺すため –

+0

私はあなたがそれをもうしたくない時に配列を使用して要素を削除するように言っている理由があります。 –

+0

まだ動作していません。私はコードで新しい質問を投稿します –

関連する問題