我需要在jQuery中停止一个函数,我试过preventStop()
但我觉得语法错了,这就是代码:
function changeColor(curNumber){
curNumber++;
if(curNumber > 3){
curNumber = 1;
}
$('body').removeClass().addClass('bgColor' + curNumber);
setTimeout(function(){changeColor(curNumber)}, 600);
}
changeColor(0);
正如您所看到的,我正在更改课程,现在,如果用户点击文档,我想停止该操作
$('body').click(function(event){
event.stopPropagation();
})
这样的事情对我没有用。
答案 0 :(得分:3)
setTimeout
返回计时器ID:
var timer = null;
function changeColor(curNumber) {
...
timer = setTimeout(function() {
changeColor(curNumber)
}, 600);
}
您可以使用clearTimeout
清除它:
$('body').click(function(event){
if (timer !== null) {
clearTimeout(timer);
}
})
答案 1 :(得分:3)
如果您试图停止更改颜色,那么您可以通过记住变量中的当前计时器然后停止它来这样做:
var timer;
function changeColor(curNumber){
curNumber++;
if(curNumber > 3){
curNumber = 1;
}
$('body').removeClass().addClass('bgColor' + curNumber);
timer = setTimeout(function(){changeColor(curNumber)}, 600);
}
changeColor(0);
$('body').click(function(event){
clearTimeout(timer);
})
然后,您可以再次致电changeColor()
再次启动它。
答案 2 :(得分:1)
您可以使用return false;
来实现这一目标。
每当我们使用return false时,控件都将返回。其他语句将不会执行。那么事件将不会被提交。
答案 3 :(得分:1)
两件事:
您应该使用setInterval
代替setTimeout
来定期举办活动。
这两个函数都返回一个值,该值可以分别传递给clearTimeout
或clearInterval
。
如果您在外部作用域中调用setInterval
并将其返回值存储在可访问的位置,则可以将click事件绑定到使用该值调用clearInterval
以停止定期回调。
答案 4 :(得分:1)
您可以使用.finish();
- http://api.jquery.com/finish/来停止正常运行的功能。不确定这是否是最佳做法,因为它基本上是为了控制Effects
,但它对我来说效果很好:
您的代码会变成这样
$('body').click(function(event){
event.finish();
})
这是一个模拟.finish()
在比较输入值后停止运行函数的示例。
<强> FIDDLE 强>
答案 5 :(得分:0)
尝试
$('body').click(function(event){
event.preventDefault();
})
或者您可以尝试使用
$('body').click(function(event){
return false;
})