Попытка установить переменную равной 0 и увеличивать ее при каждом выполнении функции onclick - PullRequest
0 голосов
/ 19 декабря 2011

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

http://www.sprayfoamsys.com/cmsdev/index.php?page=rig-constructor

function clearVar(){
var sec1=0;
document.getElementById('sec1text').innerHTML = sec1;
var sec2=0;
document.getElementById('sec2text').innerHTML = sec2;
var sec3=0;
document.getElementById('sec3text').innerHTML = sec3;
}

function sec1Var(){
sec1++;
document.getElementById('sec1text').innerHTML = sec1;
alert(sec1);
}

function sec2Var(){
sec2++;
document.getElementById('sec2text').innerHTML = sec2;
alert(sec2);
}

function sec3Var(){
sec3++;
document.getElementById('sec3text').innerHTML = sec3;
alert(sec3);
}

Ответы [ 4 ]

0 голосов
/ 19 декабря 2011

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

Вот рабочий пример увеличения cntr при каждом нажатии кнопки: http://jsfiddle.net/jfriend00/DSfXb/

<button id="test">Click Me</button><br>
<div id="output">0</div>

// global variable
var cntr = 0;
document.getElementById("test").onclick = function() {
    cntr++;
    document.getElementById("output").innerHTML = cntr;
};
0 голосов
/ 19 декабря 2011

Консоль говорит:

Uncaught ReferenceError: sec1 не определено

Вы должны фактически объявить sec1 и т. Д .:

var sec1 = 0,
    sec2 = 0,
    sec3 = 0;

function clearVar(){
    sec1 = 0; // update the declared variable to 0; don't declare it here
              // because it's then only accessible within this function

    // ... rest of code ...
0 голосов
/ 19 декабря 2011

Переменные в JavaScript ограничены функциями.По сути, это означает, что вы не можете получить доступ к переменной, объявленной внутри функции, за пределами этой функции.Таким образом, если вы объявите свои переменные в clearVar, вы не сможете получить к ним доступ из других источников.Просто поместите их перед объявлением функции.

0 голосов
/ 19 декабря 2011

Это потому, что вы объявили локальные переменные.Вам нужно объявить глобальные переменные.

var sec1=0;
var sec2=0;
var sec3=0;

function clearVar(){
    sec1=0;
    sec2=0;
    sec3=0;
}

function sec1Var(){
    sec1++;
    alert(sec1);
}
...