0

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

类似的东西对我不起作用。

4

6 回答 6

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);
    }
})
于 2013-03-15T04:42:50.700 回答
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()重新启动它。

于 2013-03-15T04:43:37.970 回答
1

你可以用它return false;来实现。

每当我们使用 return false 时,控件就会返回。其他语句不会执行。也就是说事件不会归档。

于 2013-03-15T04:41:28.473 回答
1

两件事情:

  1. 您应该使用setInterval代替setTimeout重复事件。

  2. 这两个函数都返回一个可以分别传递给clearTimeout或传递的值clearInterval

如果您setInterval在外部范围内调用并将其返回值存储在可访问的某个位置,则可以绑定 click 事件以clearInterval使用该值调用以停止重复回调。

于 2013-03-15T04:45:31.593 回答
1

您可以使用.finish();-- http://api.jquery.com/finish/ -- 来停止函数的运行。不确定这是否是最佳实践,因为它基本上是为了控制Effects,但它对我来说效果很好:

你的代码会变成这样

$('body').click(function(event){
        event.finish();
    })

这是一个模拟.finish()在比较输入值后如何停止函数运行的示例。

小提琴

于 2014-01-31T08:41:48.947 回答
0

试试喜欢

$('body').click(function(event){
    event.preventDefault();
})

或者你可以试试

$('body').click(function(event){
    return false;
})
于 2013-03-15T04:40:58.597 回答