停止运行函数jQuery

时间:2013-03-15 04:40:00

标签: jquery html function

我需要在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();
    })

这样的事情对我没有用。

6 个答案:

答案 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)

两件事:

  1. 您应该使用setInterval代替setTimeout来定期举办活动。

  2. 这两个函数都返回一个值,该值可以分别传递给clearTimeoutclearInterval

  3. 如果您在外部作用域中调用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;
})