2013-03-15 74 views
0

我需要停止在jQuery的功能,我想preventStop()但我觉得语法是错误的,这是代码:停止运行功能的jQuery

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(); 
    }) 

类似的东西不为我工作停止这一行动。

回答

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); 
    } 
}) 
+0

这使得诡计!我只为$('html')更改了$('body')!非常感谢! – 2013-03-15 04:55:58

0

尝试像

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

,或者你可以尝试用

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

可以使用return false;来实现这一目标。

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

+1

虽然它回答了这个问题,请解释清楚。 (避免单行的答案) – 2013-03-15 05:02:27

+0

此外,无论何时您使用一个班轮回答问题,您不仅会让原始海报更难理解您的答案,还会触发一次自动审查,让像Mr_Green和我这样的用户完成它。 – 2013-03-15 05:05:19

+0

感谢您的建议。下次在病房时,我会说清楚。 – PSR 2013-03-15 05:06:36

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()重新启动它。

1

两件事情:

  1. 你应该在原地重复事件使用setIntervalsetTimeout

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

如果外部范围中调用setInterval和存储其返回值的地方访问,你可以结合的Click事件调用clearInterval与价值停止经常性回调。

1

您可以使用.finish(); - http://api.jquery.com/finish/ - 停止正在运行的功能。不知道这是否是最好的做法还是不行,因为它基本上是用来控制Effects,但它是为我工作很好:

您的代码会变成这个样子

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

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

FIDDLE