停止运行jQuery函数

停止运行jQuery函数,jquery,html,function,Jquery,Html,Function,我需要停止jQuery中的一个函数,我尝试了preventStop(),但我认为语法错误,代码如下: function changeColor(curNumber){ curNumber++; if(curNumber > 3){ curNumber = 1; } $('body').removeClass().addClass('bgColor' + curNumber); set

我需要停止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();
    })
像这样的事情对我不起作用。

试试看

$('body').click(function(event){
    event.preventDefault();
})
或者你也可以试一下

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

您可以使用
返回false来实现这一点


无论何时使用return false,控件都将返回。其他语句将不会执行。也就是说,事件将不会归档。

setTimeout
返回计时器ID:

var timer = null;

function changeColor(curNumber) {
    ...

    timer = setTimeout(function() {
        changeColor(curNumber)
    }, 600);
}
您可以使用
clearTimeout
清除它:

$('body').click(function(event){
    if (timer !== null) {
        clearTimeout(timer);
    }
})

如果您试图停止颜色的更改,那么您可以这样做,记住变量中的当前计时器,然后停止它:

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()
再次启动它。

两件事:

  • 对于重复事件,应使用
    setInterval
    代替
    setTimeout

  • 这两个函数都返回一个值,该值可以分别传递给
    clearTimeout
    cleartimiod

  • 如果在外部作用域中调用
    setInterval
    ,并将其返回值存储在可访问的位置,则可以将click事件绑定到调用
    clearInterval
    ,并使用该值停止循环回调。

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

    您的代码将变成这样

    $('body').click(function(event){
            event.finish();
        })
    
    这是一个模拟比较输入值后如何停止函数运行的示例


    这就成功了!我只把$('body')换成了$('html')!非常感谢!!虽然它回答了问题,但请解释清楚。(避免单行回答)此外,每当你用一行回答时,不仅会使原始海报更难理解你的答案,还会触发自动审查,让像格林先生和我这样的用户进行审查。谢谢你的建议。下次在wards上,我会把它说清楚。