我有两个HTML按钮。第一个按钮启动下面的JavaScript函数:
function generations(){
var refresh = setInterval(function(){ mutation() }, 1000);
}
效果很好。我想第二个按钮结束setInterval。我试过这样:
function stop(){
clearInterval(refresh);
}
不起作用。如果我定义"刷新"它可以工作。函数之外的变量,但是当我想要的时候我就无法启动它,它只是自动启动。这两个函数在单独的.js文件中定义。
帮助!
答案 0 :(得分:4)
您需要在外面声明并分配作业。设置内部间隔:
var refresh;
function generations(){
refresh = setInterval(function(){ mutation() }, 1000);
}
停止:
function stop(){
if (refresh) {
clearInterval(refresh);
}
}
答案 1 :(得分:1)
refresh
仅限于generations()
您必须将refresh
设为全局或将其作为参数传递给stop()
答案 2 :(得分:1)
在您的代码中,“refresh”变量仅对其所在的函数是本地的。如果你以这种方式保留它,你应该做这样的事情:
var refresh;
function generations(){
refresh = setInterval(function(){ mutation() }, 1000);
}
function stop(){
clearInterval(refresh);
}
答案 3 :(得分:1)
Javascript中有两种不同的范围,第一种称为本地范围,第二种称为全局范围 。范围定义了其他函数对变量的访问量。以下是它的工作原理(实质上):
var
关键字在当前范围声明变量。在函数内部,这是本地范围,在函数外部,这是全局范围。请注意,我们通常喜欢在本地范围局部变量中调用变量,在全局范围全局变量中调用变量。
您声明的变量refresh
是一个局部变量,因为您在generations
函数中将其声明为内联。因此,它只能在该功能的范围内访问,而不能访问任何其他功能。这意味着stop
函数无法使用它。
如果您希望refresh
可以访问stop
,则需要全局范围 - 即刷新需要在函数之外声明。这意味着代码中的所有其他函数都可以读取/写入。
新代码的外观示例(这解决了您的问题):
var refresh; //Declare refresh in the global scope, but don't assign it a value
function generations(){
refresh = setInterval(function(){ mutation() }, 1000); //Assign a value
}
function stop(){
clearInterval(refresh); //Read that value
}
答案 4 :(得分:0)
要记住的一件事是你必须在重新初始化之前清除你的间隔。
将刷新变量保留在外部范围内,以便您也可以引用它。
Math.Round(Convert.ToDouble(pData), 4).ToString()