试图设置一个变量为0,并增加它与每个onclick函数执行

问题描述:

我是新来的JavaScript,但它在这里。我在这个页面上工作,我希望它为每个问题增加变量。我很困惑,为什么它不能正常工作,我已经尝试了几个小时不同的事情。试图设置一个变量为0,并增加它与每个onclick函数执行

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

我会补充说,唯一的理由我有“的document.getElementById(‘sec1text’)的innerHTML =秒-1。”是测试我的代码 – BrettAdamsGA 2011-12-19 17:29:30

+0

我看不到您的代码点击。 – jfriend00 2011-12-19 17:30:39

这是因为您已声明的局部变量。你需要声明全局变量。

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

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

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

感谢您的帮助,现在解决了我的问题。 – BrettAdamsGA 2011-12-19 17:37:10

控制台说:

Uncaught ReferenceError: sec1 is not defined

你有实际申报sec1等:在JavaScript

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

我知道这一定很简单,感谢帮助解决了我的问题。 – BrettAdamsGA 2011-12-19 17:36:40

变量的作用域设置的功能。基本上,这意味着你不能访问在函数外部声明的变量。因此,如果您在clearVar中声明变量,您将无法从其他地方访问它们。只需将它们放在函数声明之前。

+0

感谢您解释问题,而不仅仅是给出答案。 – BrettAdamsGA 2011-12-19 17:43:42

+0

@BrettAdamsGA不客气! – 2011-12-19 17:51:28

您的计数器变量必须有一个范围,允许它们从一次调用继续存活到下一次,以保持其值。您每次调用函数时都使用了被销毁和重新创建的局部变量。

下面是一个可逆计数器增加每个按钮按下一个工作示例: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; 
};