clearInterval函数不清除setInterval函数

时间:2015-11-02 17:03:52

标签: javascript

我利用这个资源来构建我的代码:http://www.w3schools.com/jsref/met_win_clearinterval.asp

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函数不是。

基本上,一旦$(&#34; #breadcrumbWrapper,#leftColWrapper,#rightColWrapper&#34;)。wrapAll(&#39;&#39;);运行,我希望间隔停止运行它。

编辑 - 中部标准时间下午12:24:

这是我用来包装所列元素的基本代码 -

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

此代码有效,但在DOM完全加载之前,它不会处理更改。一旦这些元素全部可用,我需要该函数才能工作。所以我需要使用setInterval来处理函数,然后在处理函数后清除间隔。

如果有人知道另一种方法,除了setIterval之外,请告诉我。

1 个答案:

答案 0 :(得分:0)

您需要在变量中创建明确 if else条件,以便确切知道启动的时间以及何时停止。此外,由于最短的毫秒间隔时间在浏览器之间不一致,虽然您希望它能够快速检测到,但我建议使用“更安全”的数字并使用100作为最小值。 .length方法是一种方便的方法,可以检查元素是否在页面上;您可以将其用作伪动态true / false条件。最后,在您的.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>