2012-12-31 75 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'調用一些回調函數。 –