这可能是一个初学者问题,但我面临下一个情况:
$(function f() {
function test2() {
//.....
}
function GetData() {
//.....
}
function update() {
test2();
GetData();
//...
}//end update
update();
});//end f()
function stop() {
clearInterval(multipleCalls);
}
function start() {
multipleCalls=null; //this is a global variable
setTimeout(update, 1000);
}
当按下按钮并且一切正常时,停止功能会停止图形。按下按钮时,启动功能应重新启动图形。我的猜测是在启动函数中没有很好地调用更新函数。我怎么能这样做才能正常工作?
答案 0 :(得分:1)
您目前已注释掉关闭}
功能的update
,因此显示end f
的行实际上并未结束f()
。在其当前状态下,您的代码将不会执行。 (我注意到其他人编辑了您的代码,之后此评论不再有效;我不知道编辑是否更接近您的实际代码,或者它是否确实模糊了真正的错误)
您指的是multiplecalls
和multipleCalls
。请注意,javascript区分大小写。
您正在清除multipleCalls
,但从未将其设置为null
以外的任何内容。您打算写multipleCalls = setTimeout(update, 1000)
吗?
start
被置于f
之外,无法访问update
。定义update
及其依赖于f()
之外的函数,或使其可全局访问,即
window.update = function() { ... }
然后您可以访问setTimeout(window.update, 1000);
答案 1 :(得分:1)
您有一个范围问题。 update
仅在 f
您正尝试在f
内的start
外拨打电话。实现此目的的唯一方法是将function update
公开到与start
所在的范围相同的范围,或将start
与update
放在同一范围内。
第一个选项最简单(也是最丑陋):
function update() {
//...
}
// assign it to the global scope (window is the global scope for browsers)
window.update = update;
现在可以从`starts。
获得update
更合适的方法是定义处理程序(在start
范围内调用stop
和f
,例如
$(function f() {
//.. everything there now
$('.start').on('click', function(e) {
setTimeout(update, 1000);
});
});
工作示例
$(function f() {
var timer; // no need to be 'global'
function update() {
$('.result').text(new Date() + ' GetData();');
}
$('.start').on('click', function() {
// always clear a timer before setting it
clearTimeout(timer);
// and always set a timer variable, so it can be cancelled
timer = setTimeout(update, 1000);
});
$('.stop').on('click', function() {
// cancel the timer
clearTimeout(timer);
});
});

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<button class=start>start</button>
<button class=stop>stop</button>
<div class=result>..</div>
&#13;
答案 2 :(得分:1)
你可以试试这个:
window.update = function update() {...}
然后:
setTimeout(window.update, 1000);