停止函数jquery重复

时间:2013-07-28 23:22:26

标签: javascript jquery

如果div html = Ready,我怎么能阻止函数重复,这是我的代码

  (function(){
   var Load_Div_Error = $( ".Load_Div_Error" ).html();

   if(Load_Div_Error == "Ready") {
    $( "div.Load_Div_Error" ).text( "Test" );
   }
   setTimeout(arguments.callee, 2000);
  })();

3 个答案:

答案 0 :(得分:2)

jQuery的.html()可能会在“Ready”周围返回空格。在比较之前删除它..

(function myLoad(){
   var Load_Div_Error = $( ".Load_Div_Error" ).html(); 

   if($.trim(Load_Div_Error) == "Ready") // remove the whitespace before comparing
       $( "div.Load_Div_Error" ).text( "Test" );
   else 
       setTimeout(myLoad, 2000); // run again only if Load_Div_Error != 'Ready'
})();

我已将arguments.callee替换为命名函数,因为它在严格模式下被禁止 - 最好不要使用它

答案 1 :(得分:2)

else阻止添加到您的if

if(Load_Div_Error == "Ready") {
    $( "div.Load_Div_Error" ).text( "Test" );
} else {
    setTimeout(arguments.callee, 2000);
}

仅当Div内容!=就绪

时,setTimeout才会启动

答案 2 :(得分:2)

您可以将Timeout设置为变量,并在不再需要变量后将其清除:

(function(){
   var timer;
   var Load_Div_Error = $( ".Load_Div_Error" ).html();

   if(Load_Div_Error == "Ready") {
    $( "div.Load_Div_Error" ).text( "Test" );
    clearTimeout(timer);
   }
   else
    timer = setTimeout(arguments.callee, 2000);
  })();

或者,我正在考虑在使用setInterval函数时清除间隔,最好使用setTimeout,而不是setTimeout,恕我直言。

但是,是的,如果你只是添加一个else语句并将setTimeout放在那里,它也会起作用,因为{{1}}不需要被清除。