2016-01-20 28 views
0

想法是獲取一個元素的寬度,並根據大小做一些事情。有時jquery沒有regonzise div寬度

function featureSliderLoad(){ 
    var feature = setInterval(function(){ 
     var adWidth = jQuery('#leaderboard div iframe').width(); 

     if(adWidth != 0 && adWidth != null){ 
      if(adWidth > 728){ 
       Do something 
      } else { 
       Do something else 
      } 
     } 

     if(jQuery('#leaderboard div iframe').width() > 100){ 
      clearInterval(feature); 
     } 
    }, 2000); 
}); 

這在大多數情況下都有效,但是現在它不會。如果使用的onload,如:

jQuery(window).load(function featureSliderLoad() 

然後,它的工作原理的100%的時間,但我不應該,因爲我有:

if(adWidth != 0 && adWidth != null) 

其中應考慮元素的問題,注意不要被加載並提出0或null。

有沒有人看到代碼會阻止它不工作的問題,當我不使用(窗口).load?

謝謝

+0

它會更好..如果你也發佈你的html .. – ameenulla0007

+0

請在發佈問題之前閱讀[問] – Amit

+0

可能有可能在2000ms之後,由於某些延遲有時還沒有加載iframe。 – Diljohn5741

回答

1

這聽起來像是在DOM完全呈現在頁面之前執行腳本。如果您將div元素注入到頁面文章渲染中,您可能也會看到一個問題。這就是爲什麼你的片段Query(window).load(...工作,因爲它阻止它被調用,直到DOM完成渲染。

我會將您的jQuery包裝在documet.ready函數中,或者使用上面的代碼阻止代碼在DOM完全呈現之後執行。否則它會被擊中或錯過。

+0

我認爲每2秒調用一次函數,直到寬度不是0或null,然後在解決該問題後結束腳本。正如你所提到的那樣,我將會採取上述的一種方式。謝謝! –

0

有時會起作用而在其他時間不起作用的原因是因爲無法保證窗口元素及其中包含的所有元素在您調用函數之前已經加載。如果你沒有使用jQuery的加載事件(jquery load event)或類似的東西來延遲對你的函數的調用,直到HTML加載完畢,那麼當你的函數被調用時,你的HTML處於未知狀態;因此,你的功能將有不可預知的結果。

+0

謝謝gpersell! –