2010-12-02 4 views
0

Suite d'un cas résolu avec un nouveau problème. Le code suivant calcule les valeurs qui sont chargées via ajax à partir d'un autre script. Une série d'options sous une autre forme détermine quelle information est chargée et donc quels sont les calculs finaux. Le problème est qu'une fois que vous avez chargé toutes les options disponibles, vous ne pouvez pas les charger et le script qui additionne tous les totaux de champ échoue en fait à ce stade. Ainsi, par exemple, si vous chargez 2 options, les totaux seront augmentés. Charger dans un tiers et il va ajouter le total de tous les 3. Prendre une option sur et le script échoue ensuite. Je crois qu'il est quelque chose à voir avec la façon dont le script va chercher les ids produits — var productIds = {};Calcul des valeurs chargées via jquery

Toute aide serait appréciée

Voici le code

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); 
    } 
} 

échantillon de travail à http://www.divethegap.com/update/diving-trips/adventure-training/#level_01 (cliquer sur les débutants) Merci beaucoup

Répondre

0

Si je comprends bien, ce que vous essayez d'obtenir est de superposer une collection d'identifiants dans un tableau à partir duquel vous pouvez supprimer des éléments afin que vous puissiez calculer seulement les options sélectionnées. Je voudrais déclarer var productIds = []; et ajouter des identifiants en utilisant productIds.push(id). Lorsque vous supprimez une option, vous pouvez simplement utiliser productids.splice(indexofId, 1);. Lorsque vous recalculerez vous auriez juste les identifiants que vous voulez.

+0

Sorte de, pas tout à fait sûr que le fera tout à fait. Les options déterminent ce qui est chargé sur le côté droit. Les produits chargés contiennent des informations (prix etc ....). Lorsqu'une option est désélectionnée, son produit associé est chargé depuis le côté droit. Le script ci-dessus calcule les informations du côté droit mais ne met pas à jour sa collection d'ID de produit lorsqu'un produit est chargé. Une idée. –

+0

La raison pour laquelle je vous dis d'utiliser array et de supprimer l'élément lorsque vous ne le voulez plus, c'est qu'à un moment donné, vous parcourez votre collection ProductIds et essayez de résoudre les contrôles non chargés en utilisant ces identifiants. –

+0

Ne fonctionne toujours pas. Je vais poster une nouvelle question avec le code –

Questions connexes