2015-02-03 6 views
-3

Я использую onChange Listener в выпадающем меню, On change. Я хочу добавить все числа в переменную totalCost, но ответ undefined20 или какой-либо другой номер. Он не складывается.Добавление номеров вверх

<p id="test"></p> 
    <p id="test2"></p> 
    <select id="first" onChange="myFunction()"> 
    <option></option> 
    <option value="20">Test1</option> 
    <option value='100'>Test2</option> 
    <option value='200'>Test3</option> 

    </select> 

    <script> 
document.getElementById("test").onchange = function() {myFunction()}; 


function myFunction(){ 
    var x = document.getElementById("first").value; 
    var totalCost; 
    totalCost += x; 
    document.getElementById("test").innerHTML = x; 
    document.getElementById("test2").innerHTML = totalCost; 
    } 

</script> 
+1

попробуйте инициализировать totalCost: 'var totalCost = 0;' –

+0

И почему вы не смогли найти эту простую ошибку самостоятельно? –

ответ

3

undefined20 является результатом:

totalCost += x 

Поскольку переменная, totalCost не инициализируется со значением; чтобы исправить то, что вам нужно всего лишь использовать:

var totalCost = 0; 

totalCost += parseInt(x, 10); 

Причиной parseInt() является то, что все атрибуты HTML считаются строки по умолчанию, и должны - если вы хотите ряд - преобразовать в число, используя либо:

  • +x (унарный + оператор),
  • Number(x),
  • parseInt(x, 10) (10 это числовое основание, десять для десятичного-б номера телефонов),
  • parseFloat(x).

document.getElementById("test").onchange = function() { 
 
    myFunction() 
 
}; 
 

 

 
function myFunction() { 
 
    var x = document.getElementById("first").value, 
 
     totalCost = 0; 
 
    totalCost += parseInt(x, 10); 
 
    document.getElementById("test").innerHTML = x; 
 
    document.getElementById("test2").innerHTML = totalCost; 
 
}
<p id="test"></p> 
 
<p id="test2"></p> 
 
<select id="first" onChange="myFunction()"> 
 
    <option></option> 
 
    <option value="20">Test1</option> 
 
    <option value='100'>Test2</option> 
 
    <option value='200'>Test3</option> 
 

 
</select>

Ссылки:

+1

Отсутствует ссылка: [* Unary + operator *] (http://ecma-international.org/ecma-262/5.1/#sec-11.4.6). Существует также конструктор [* Number *] (http://ecma-international.org/ecma-262/5.1/#sec-15.7.1), называемый как функция: 'Number (x)'. ;-) – RobG

+0

@RobG: спасибо! Я до сих пор не нашел хорошей ссылки для унарного оператора '+'; и я отредактировал, чтобы добавить это, и 'Number (x)' в ответ. Очень признателен! :) –

+0

Если никакой другой операции не требуется, вы можете назначить 'myFunction' непосредственно событию' onchange', вместо того, чтобы обернуть его внутри анонимной функции.** Редактирование **: @DavidThomas достаточно справедливо;) – blex

1

написав эту строку: var totalCost; вы переопределить вар и сбросить его значение каждый раз. вместо этого определите его как-то снаружи функция без ключевого слова var. Таким образом, эта переменная будет глобальной.

также не забудьте установить его начальное значение на ноль.

+1

Не нужно быть «_with« var' keyword_ », он также будет доступен для функции точно так же, потому что он находится в той же области. – blex

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