2013-04-15 3 views
-1

Я пытаюсь вычислить общее количество компакт-дисков в дополнение к P & P. Код, который я использую, подходит к сумме NaN?Получение NaN при расчете

Очень смущает здесь. Что я делаю не так?

function calculateTotal() { 
    var Collection method = document.getElementById('collection').value + 
    var select CDs = document.getElementById('selectCD').value; 
    var total = document.getElementById('total'); 
    total.value = 'collection'(total) + 'selectCD'(total); 
} 

Here is a JSFiddle с полным кодом.

+7

Я бы посоветовал вам взглянуть на консоль ошибок: в вашем коде есть несколько синтаксических ошибок. –

+0

вы добавили + вместо; NetStarter

+0

Этот код содержит *** много *** ошибок синтаксиса! Во-первых, имена переменных * не могут содержать пробелы. Кроме того, у вас есть конечная '+' в вашей первой строке. –

ответ

1

В вашей скрипке collection и selectCD являются divs (не входные поля) , содержащие inputfields. Вы не можете сделать divElm.value.

Тогда php-код в вашей скрипке, как правило, сможет выводить более одного компакт-диска, поэтому вам нужно будет добавить итоговые значения выбранных компакт-дисков.

минимальных изменений, необходимых для получения ваш кода работает, является:

function calculateTotal(){ 
    var coll = document.getElementsByName('deliveryType'), 
     cds = document.getElementsByName('cd[]'), 
     cdTot = 0, 
      L = coll.length; 
    while(L--){if(coll[L].checked){ //get shipping costs 
     coll=Number(coll[L].getAttribute('title')); break; 
    }   } 
    L=cds.length; 
    while(L--){if(cds[L].checked){ //add total prices 
     cdTot += Number(cds[L].getAttribute('title')); 
    }   } 
    // output total 
    document.getElementById('total').value = coll + cdTot; 
} 

Кроме того, вы хотите установить еще несколько триггеров для работы calculateTotal (от расходов на доставку и отдельный компакт-дисков, таким образом, если они меняются, общее поле будет обновляться до).
working fiddle с этими изменениями (и некоторые другие исправления) на основе вашей скрипки, чтобы вы могли получить мотивированное наблюдение (расчет) в действии.

Однако я надеюсь, что это касается школьного вопроса, а не для живого интернет-магазина. Я бы передумал свою стратегию, поскольку, по-моему, вы сейчас работаете над большой дырой в безопасности.

Удачи вам!

+0

Я предпочитаю использовать 'parseInt' /' parseFloat' вместо 'Number()'. 'Number()' даст 'NaN', если строка не является допустимым числом, тогда как' parseInt' будет пытаться ее разобрать. 'parseInt ('123abc', 10)' is '123', но' Number ('123abc') 'is' NaN'. –

+1

@RocketHazmat: Действительно, это просто то, что нужно, а что только плавает на вашей лодке. Мне также нравится помещать '+' перед строкой или умножать строку на 1 или .. Есть так много способов: http://jsperf.com/convert-string-to-number-techniques/2 – GitaarLAB

+0

@GitaarLAB спасибо за ваш добрый ответ. решение, которое вы предоставили по какой-либо причине, по-прежнему не работает в моем коде. может быть, если я предоставил весь код, вы можете помочь? С уважением –