2015-11-02 143 views
0

我利用這個資源來構造我的代碼:http://www.w3schools.com/jsref/met_win_clearinterval.aspclearInterval函數不清除setInterval函數

var intervalID = setInterval(function(){ ogpeWrapper() }, 10); 

function ogpeWrapper() { 
    $("#breadcrumbWrapper, #leftColWrapper, #rightColWrapper").wrapAll('<div id="colWrapperContainer"></div>'); 
}(jQuery); 

function myStopFunction() { 
    if (document.getElementById('colWrapperContainer')) { 
    clearInterval(intervalID); 
    setIntervalID = undefined; 
    }  
} 

我ogpeWrapper功能正在運行,但調用clearInterval功能是沒有的。

基本上,一旦$(「#breadcrumbWrapper,#leftColWrapper,#rightColWrapper」)。wrapAll('');運行,我想間隔停止運行它。

編輯 - 下午12點24分CST:

這是基本的代碼,我利用來包裝上市元素 -

(function($) { 
    $("#breadcrumbAds, #breadcrumbWrapper, #containerTopParsys, #leftColWrapper, #rightColWrapper").wrapAll('<div id="colWrapperContainer"></div>'); 
})(jQuery); 

此代碼的工作,但它不辦理變更手續後才DOM已完全加載。只要這些元素全部可用,我就需要該功能才能工作。所以我需要使用setInterval來處理函數,然後在處理函數後清除間隔。

如果有人知道另一種方法來做到這一點,除了setIterval,請讓我知道。

+8

你在哪裏調用'myStopFunction()'? – Rayon

+1

旁註:你將'jQuery'傳遞給'ogpeWrapper',但是無論如何都使用全局別名,因爲你的'ogpeWrapper'定義沒有參數 – Grundy

+0

我使用了基於http://www.w3schools.com/jsref的「function myStopFunction()上面引用的/met_win_clearinterval.asp鏈接。我對javascript完全陌生,所以我不知道我錯了什麼。 – typingoverworld

回答

0

您需要的變量中創建一個明確如果其他條件,所以你知道什麼時候會開始何時會停止。此外,由於最小毫秒間隔時間爲,在瀏覽器上不一致,儘管您希望它檢測速度非常快,但我會建議使用「更安全」的號碼,並使用100作爲最小值。方法.length是一個方便的小方法來檢查元素是否在頁面上;您可以將其用作僞動態真/假條件。最後,在你的.wrapAll()標籤中,我換了你的單引號和雙引號,因爲這是最好的做法。

var colWrapper = setInterval(function(){  
    if ($('div#colWrapperContainer').length > 0) { 
     var doNothing = ""; 
     clearInterval(colWrapper); 
    } else { 
     $("#breadcrumbWrapper, #leftColWrapper, #rightColWrapper").wrapAll("<div id='colWrapperContainer'></div>"); 
    } 
}, 100); 

這裏是供您參考工作示例Wrap Example

更新:

示例把腳本<body>標籤(沒有 window.load /的document.ready)內,從而它一載入就可以獨立運行。

<script type="text/javascript">//<![CDATA[ 

//http://stackoverflow.com/questions/33483000/clearinterval-function-not-clearing-setinterval-function/33483267#33483267 
//Auto Wrap Solution 
//Alexander Dixon [11-02-2015] 
var wrapThese = $("#breadcrumbWrapper, #leftColWrapper, #rightColWrapper"); 
var colWrapper = setInterval(function() { 
    if ($('div#colWrapperContainer').length > 0) { 
     var doNothing = ""; 
     clearInterval(colWrapper); 
    } else { 
     wrapThese.wrapAll('<div id="colWrapperContainer"></div>').addClass('success'); 
    } 
}, 100); 
//]]> 

</script> 
+0

此解決方案在包裝元素時確實成功,但是,直到頁面加載完成後才能工作。我需要使用間隔來處理這個問題的原因是,一旦檢測到元素,就會加載它,而不是在整個DOM加載之後加載。 – typingoverworld

+0

我已更新我的示例以包含一個將立即激發腳本的方法。如果您想測試,請點擊「Wrap Example」鏈接,並在左側的下拉列表中選中「no wrap-in in body」。 –

+0

如果只有我能夠這樣做。不幸的是,我們的CMS限制了這種交互。 – typingoverworld