2009-08-21 80 views
0

我在網站上通過jQuery使用圖像交叉淡化方法。出於保密的原因,我不能發佈該網站的全部代碼,但這裏的JavaScript進行交叉衰減器(基於this reference):JQuery問題:腳本(有時)失敗(某些版本)IE7

 <script type="text/javascript"> 
     $(function() { 
      if ($.browser.msie && $.browser.version < 7) return;   
      $('#nav li')  
      .removeClass('highlight').find('a').append('<span class="hover" />').each(function() { 
       var $span = $('> span.hover', this).css('opacity', 0); 
       $(this).hover(function() { 
       $span.stop().fadeTo(250, 1); 
       }, function() { 
       $span.stop().fadeTo(250, 0); 
       }); 
      }); 
     }); 
    </script> 

它可以順順當當在所有瀏覽器 - 包括IE7上安裝我的測試PC。但是,在IE7的其他電腦上,有時失敗。圖像將加載,但懸停在它們上面不起作用。這意味着JS不會徹底失敗 - 在這種情況下,翻轉仍然可以正常工作,而不會退色。相反,似乎IE7正在刪除「高亮」類,但隨後停止。

真正離奇的部分?失敗是100%隨機的。如果我刷新窗口,有時效果會正常。怎麼會這樣?

更新:我確定問題在於AJAX腳本爲網站提供動力。刪除所有AJAX並用靜態內容替換它可消除錯誤。我的理論是當頁面加載時,AJAX內容有時會在圖像加載之前完成。這使得IE7嚇壞了,放棄了淡入淡出效果。如果我認爲這是問題,那麼問題是:我該如何解決這個問題?

更新2:進一步下鄉兔子洞,使用招​​,我注意到了在IE7的效果每個成功加載一個一致的事情:我使用了懸停在主圖像的加載被中止,然後再次加載。當效果不成功時不會發生這種情況。換句話說,強制瀏覽器使用簡單的jQuery預加載器函數預加載圖像,每隔一段時間就會在IE7中打破交叉效應,而不是當前的零星工作狀態。

這對我來說太奇怪了,甚至無法理解,但任何想法都是值得歡迎的。

+1

是否有可能某些資源文件無法可靠地下載(其他腳本,圖像,CSS等)? – 2009-08-21 16:24:17

+0

我認爲邁克爾可能會做些什麼。抓住提琴手或其他交通監視器,並確保所有文件都通過。 – Travis 2009-08-21 16:29:38

+0

不錯的想法,夥計們,但小提琴手驗證一切都會通過好嗎... – Josh 2009-08-21 17:11:44

回答

0

在調用ready函數之前是否包含了CSS?從the docs

注:請確保所有樣式表腳本(尤其是那些調用準備功能)之前包括在內。這樣做將確保在jQuery代碼開始執行之前,所有元素屬性都已正確定義。不這樣做會導致零星的問題,尤其是在基於WebKit的瀏覽器(如Safari)上。

我知道IE不是基於WebKit的,但它值得檢查。

+0

是的,所有的CSS都在腳本之前加載。不錯,儘管。 在這一點上,我不幸只是考慮完全禁用IE7的效果。 – Josh 2009-08-24 13:32:24