2010-12-02 4 views
0

Продолжение с решетчатого случая с новой проблемой. Следующий код вычисляет значения, которые загружаются через ajax из другого сценария. Ряд вариантов в другой форме определяет, какая информация загружается и, следовательно, какие окончательные вычисления.Вычисление значений, загружаемых через jquery

Проблема заключается в том, что после того, как вы загрузили все доступные параметры, вы не сможете их загрузить, и скрипт, который суммирует все итоговые значения полей, на самом деле не работает на этом этапе. Так, например, если вы загрузите в 2 варианта, у него будет сумма. Загрузите третью часть, и она суммирует общее количество всех. Возьмите один вариант и сценарий завершится неудачей. Я считаю, что это что-то делать с тем, как сценарий извлекает идентификаторы продукта — var productIds = {};

Любая помощь будет оценена

Вот код

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

работает образец на http://www.divethegap.com/update/diving-trips/adventure-training/#level_01 (нажмите на начинающих) Many Thanks

ответ

0

Если я понимаю, что вы пытаетесь достичь, это собрать коллекцию идентификаторов в массиве, из которого вы можете удалить элементы, чтобы вы могли вычислить только выбранные параметры. Я объявлял бы var productIds = []; и добавлял в него идентификаторы, используя productIds.push(id). Когда вы удаляете опцию, вы можете просто использовать productids.splice(indexofId, 1);. Когда вы пересчитаете, у вас будут только те идентификаторы, которые вы хотите.

+0

Сортировка, не совсем уверенная, что это вполне удастся. Параметры определяют, что загружено с правой стороны. Загруженные продукты содержат информацию (Цена и т. Д.). Когда опция отменяется, ее ассоциированный продукт загружается с правой стороны. Сценарий выше вычисляет информацию в правой части, но не обновляет свою коллекцию ProductID при загрузке продукта. Есть идеи. – 2010-12-02 15:48:01

Смежные вопросы