在Javascript中多次访问变量

时间:2014-10-24 11:42:57

标签: javascript

在Javascript中,我有一个函数,每秒向变量添加1,我想添加一个减去3的函数(通过单击调用)。但是我有(逻辑上)问题,因为变量是由两个函数访问的。 / p>

每秒递增的递归函数就是这个:

function incrementBD() 
{
    var BD = parseInt(document.getElementById('divBD').innerHTML);
    BD = BD+1;
    document.getElementById('divBD').innerHTML = BD;
    setTimeout('incrementBD()',1000);
}

减去3的函数就是这个

function less3()
{
    var BD = parseInt(document.getElementById('divBD').innerHTML);
    BD = BD-3;
    document.getElementById('divBD').innerHTML = BD;
}

现在,我的变量存储在一个我可以直接在Javascript中工作。

但是我该如何处理多重访问问题呢?

谢谢你的帮助! =)

编辑:我创建了(如建议的)全局变量。当我点击它时按预期减去3,但每次尝试时变量都会返回1。

var BD;

function incrementBD() 
{
BD = parseInt(document.getElementById('divBD').innerHTML);
BD = BD+1;
document.getElementById('divBD').innerHTML = BD;
setTimeout('incrementBD()',1000);
}

function less3()
{
BD = parseInt(document.getElementById('divBD').innerHTML);
BD = BD-3;
document.getElementById('divBD').innerHTML = BD;
}

编辑2由于此代码似乎适用于其他人,这里是我的HTML页面

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//FR" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
<head>
    <title>Index</title>
    <script src="fonctions.js"></script>
</head>

<body onload="incrementBD()">

    <div id="content">
        Broken Dreams : <span id="divBD">0</span>
    </div>

    <a href="" onclick="less3()">Minus 3</a>

</body>
</html>

2 个答案:

答案 0 :(得分:1)

问题不在于变量,而在于链接:

<a href="" onclick="less3()">Minus 3</a>

每次点击它时,它都会执行链接操作,并导航到"",重新加载当前页面。

要防止这种情况,请从onclick处理程序返回false以防止&lt; a&gt;的默认操作。标记:

<a href="" onclick="less3();return false;">Minus 3</a>

或者,使用按钮:

<button onclick="less3()">Minus 3</button>

答案 1 :(得分:0)

您应该考虑范围,以确定您的选择。您可以使用全局变量来实现此目的:

var BD = 0; //global var
function incrementBD() 
{
    BD = BD+1; //uses global var (not the html value)
    document.getElementById('divBD').innerHTML = BD; //"prints" the result to the html
    setTimeout('incrementBD()',1000);
}

function less3()
{
    BD = BD-3; //use the same global value
    document.getElementById('divBD').innerHTML = BD; //"print" it again
}