2012-12-31 42 views
0

心中已经得到了代码,检查一些元素的右上角的当前位置:setInterval的执行不断

function checkContentPos(e) { 
    var positionLeft = 0, 
    checkTabPos = null, 
    pos; 

    e = $(e).filter('li'); 
    alert($(e).attr('class')); 
    //alert($(e).attr('class')); 
    checkTabPos = setInterval(
     function() { 
      ii++; 
      debug(ii); 
      pos = $(e).offset(); 
      pos['left'] += parseInt($(e).css('width')); 
      positionLeft = pos.left; 
      debug(positionLeft); 
     }, 40); 
    function stopCheckTabPos() { 
     debug('stopCheckTabPos invoked') 
     clearInterval('checkTabPos'); 
    } 
    setTimeout(stopCheckTabPos, 400); 
    return(positionLeft); 
    }; 

但我看起来像它循环到instanity。 setTimeout之后,它仍然不断被调用。

回答

1
clearInterval('checkTabPos'); 

请勿在此处使用引号。那将如何工作?您需要传入由setInterval返回的标识符,而不是一些任意字符串。

+0

它是那么容易......我花了时间的。谢谢! – maszynka

1

你调用clearInterval以字符串'checkTabPos'时,你应该使用它与变量

function stopCheckTabPos() { 
    debug('stopCheckTabPos invoked') 
    clearInterval(checkTabPos); 
} 
+0

嗯,也许有人可以告诉我为什么我cannout访问positionLeft变量?在执行setInterval之后它仍然为零,但是当它在函数中时,该值是正确的。 – maszynka

+0

'checkContentPos'结尾处的'return'发生在执行之前,而不是之后,因此'positionLeft'是'0'。 'setInterval'和'setTimeout'不会阻止执行。在清除时间间隔后,您需要使用'stopCheckTabPos'调用一些回调函数。 –