2013-03-15 87 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