2010-12-03 10 views
0

コードが起動していますが、このコードの削除部分は機能しません。削除部分は、idとその情報がロードされると計算に含まれないように、オブジェクトから与えられたidを削除する必要があります。しかし、それはまだ計算にそれを保持しません。私はコミュニティによって提供されたこれを回避するいくつかのソリューションを試しましたが、何も機能していません。誰もが何か考えを得た。JavascriptオブジェクトがIDを削除していない計算フォーム

var productIds = {} 
function product_analysis(address, id, box) { 
    productIds[id] = true; // store all id's as the totals are calculated 
    if (box.checked) { 

     $('#product_' + box.alt).load(address); 

    } 
    else { 

     $('#product_' + box.alt).load('http://www.divethegap.com/update/blank2.html'); 
     (delete productIds[id]); 

    } 
    document.getElementById('product_quantity_PRI_' + box.alt).value = box.value; 


}; 

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

    Number($('product_price_total_' + id).value = price * quantity); 
    Number($('product_duration_total_' + id).value = duration * quantity); 
    Number($('product_dives_total_' + id).value = dives * quantity); 
    Number($('product_hire_total_' + id).value = hire * quantity); 
    function $(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 += $('product_price_total_' + id).value*1; 
     totalDurationTotal += $('product_duration_total_' + id).value*1; 
     totalDivesTotal += $('product_dives_total_' + id).value*1; 
     totalHireTotal += $('product_hire_total_' + id).value*1; 
    } 
    $('GT_total_price').value = totalPriceTotal; 
    $('GT_total_duration').value = totalDurationTotal; 
    $('GT_total_dives').value = totalDivesTotal; 
    $('GT_total_hire').value = totalHireTotal; 

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

} 
+0

どのようにこれらの2つの関数が呼ばれますか?より多く見ることなく、問題が何であるかを知ることは難しいです。 – Pointy

+1

また、 "product_totals()"で定義した "$"関数は、他の場所でjQueryを使用しているので、やや歪んでいます。 – Pointy

+0

最初の関数 'product_analysis(address、id、box)'は、ページ上のオプションによってonClickと呼ばれます。 ファンクションproduct_totals(id)は、最初の関数でロードされた製品のロードが完了すると呼び出されます。

答えて

0

それはあなたがここで何をやっている伝えるのは難しいのですが、それはdelete演算子が間違って取得することも難しいです。削除前と削除後にproductIdsにアラートを入れてください。削除されたキーがオブジェクトに表示されるのではないかと思います。

ポイントは、あなたがしようとしていることを実行するためのより良い方法ですが、英語で操作を記述できますか?

+0

はい、おそらくもっと良い方法があります。私はコーディングにネイティブではないので、簡単に私に行ってください。予約フォームです。左側には、対応する製品をJqueryの負荷を介して右側にロードするオプションがあります。これらの読み込まれたアイテムには、その製品の価格、期間、ダイビング、​​および雇用のフィールドが含まれます。オプションを選択すると、製品に割り当てられた数量が掛けられます。その後、すべてのオブジェクトを合計して合計金額、総所要時間などを追加しました。今では、私を激怒させているよりも、http://www.divethegap.com/update/diving-trips/adventure-training/>>初心者をクリックしてください –

+0

あなたはあなたがより良い答えを得るために文脈を提供しているという意図を説明するならば、批評を意味するものではありません。 – annakata

+0

@ロビン:あなたはいくつかのIEの問題を抱えているようです(私たちすべてではありません)。ケンの提案はしっかりしているようだ。 – annakata

1

あなたはこれがちょうど野生の推測である

...第二の機能は、最初の関数でロードされた製品は、読み込みが完了した

...と呼ばれていることをコメントで言及し、あなたのコードをもっと見ることなく、deleteの後にの​​の後に起こっているようですが、コールバックにはありません。手配の仕方によっては、product_totals(id)の後に削除が行われる可能性があります。だから私は次のように並べ替えることをお勧めします:

$('#product_' + box.alt) 
    .load('http://www.divethegap.com/update/blank2.html', function(){ 
    delete productIds[id]; 
    product_totals(id); 
    }); 
+0

明らかに可能性のようです。 – annakata

+0

スクリプトは、コードの最下部にあるajaxの読み込みでロードされます。

+0

ロビン、「コードの最後に」とはどういう意味ですか?あなたはページの一番下にあるのですか? –

関連する問題