对Javascript中的一个变量的多次访问

Multiple access to a variable in Javascript

本文关键字:变量 一个 访问 Javascript      更新时间:2023-09-26

在Javascript中,我有一个函数每秒给变量加1,我想添加一个函数(点击调用)减去3。但我有(逻辑上)问题,因为两个函数都可以访问变量。

每秒递增的递归函数是这样的:

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>

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

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

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

为了防止这种情况,请从onclick处理程序返回false,以防止<a>标签:

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

或者,使用一个按钮:

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

您应该考虑包含选项的范围。您可以使用全局变量来实现这一点:

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
}