2009-11-09 51 views
0

好吧,我很難過。基本上,這個腳本在FF中工作正常,但不在IE(6,7或8)中 - 它返回一個「Object不支持這個屬性或方法」的錯誤。任何想法?:IE中的jQuery/AJAX:對象不支持這個屬性或方法

function portfolioAjaxLoader(page){ 
$("div#portfolio_container").load("include/DCK_portfolio_gallery.inc.php?cat=" + page); 
} 

$(document).ready(function(){ 

    $('a.portfolio_subnav').livequery('click',function(){ 
    portfolioAjaxLoader(this.title); 
    return false; 
    }); 

//modify page DOM if Javascript is switched on 
$('div#gallery_frame').livequery(function(){ 
    //assign portfolioAjaxLoader to sub navigation links 

    gallery_frame = $('div#gallery_frame'); 
    //set gallery_strip width to the number of entries multiplied by width of gallery entry element 
    gallery_strip = $('div#gallery_strip'); 
    gallery_entries = $('div#gallery_strip a'); 
    elementWidth = 235; 
    gallery_strip_width = elementWidth*gallery_entries.length+'px'; 
    gallery_strip.css({'width':gallery_strip_width}); 

    //add portfolio navigation buttons 
    if(gallery_entries.length>4){ 
     $('div#portfolio_nav').before('<p id="portfolio_nav_prev"></p><p id="portfolio_nav_next"></p>'); 
     } 

    //assign event triggers to inserted portfolio nav elements 
    prev = $("p#portfolio_nav_prev"); 
    next = $("p#portfolio_nav_next"); 

    scrollPrevMax = (((gallery_entries.length - 4) * elementWidth)+20);//tolerance 
    scrollMax = ((gallery_entries.length - 5) * elementWidth); 
    scrollMin = ((gallery_entries.length - 6) * elementWidth); 
    }); 


    function nextAnim(){ 
     //remove handler 
     next.unbind(); 

     var currentScrollPos = gallery_frame.scrollLeft(); 
     var targetPos = currentScrollPos + elementWidth; 

     if(currentScrollPos > scrollMin){ 
      next.fadeOut("fast"); 
      } 

     if(currentScrollPos >= 0){ 
      prev.fadeIn("fast"); 
      } 


     gallery_frame.animate({scrollLeft:targetPos}, 300, 'easeInOutQuart',function(){next.bind('click',nextAnim)}); 
     return false; 
     } 


    function prevAnim(){ 
     //remove handler 
     prev.unbind(); 

     var currentScrollPos = gallery_frame.scrollLeft(); 
     var targetPos = currentScrollPos - elementWidth; 

     if(currentScrollPos < scrollPrevMax){ 
      next.fadeIn("fast"); 
      } 

     if((currentScrollPos == 0)||(currentScrollPos < elementWidth*2)){ 
      prev.fadeOut("fast"); 
      } 

     gallery_frame.animate({scrollLeft:targetPos}, 300, 'easeInOutQuart',function(){prev.bind('click',prevAnim)}); 
     //prev.bind('click',prevAnim); 
     return false; 
     } 

    next.click(nextAnim); 
    prev.click(prevAnim); 

}); 

我特意在全局範圍內留下了一些元素(通過在其聲明中省略var)。

只是爲了記錄在案,它報告錯誤的位置:

gallery_frame = $('div#gallery_frame'); 

字9號線,16

+1

哪條線/部分代碼拋出錯誤? – BalusC

+0

修改了條目,對不起。 – sunwukung

回答

2

好吧,我似乎已經破解它。首先 - 我需要初始化在開場的document.ready功能即

var gallery_frame,gallery_strip,gallery_entries,elementWidth,gallery_strip_width, prev, next, scrollPrevMax,scrollMax,scrollMin; 

然後,我不得不搬到檢測畫廊幀的liveQuery函數內部的事件處理程序分配的變量。

感謝您的幫助。

+1

謝謝! :)被這個卡住了。宣佈變量並開始工作。 IE應該被禁止。 – DMin

0

你要使用調試器,如果你不已經步過它知道哪條線路導致問題。如果您無法及時附加調試器,請將其放在正確的位置。

debugger; 

然後,檢查看哪個語句觸發了這個。很可能,您正在使用特定於瀏覽器的方法或屬性。你會想要避免這些。如果JQuery提供了它自己的那個屬性或方法的版本,那麼就使用JQuery的版本。

0

當您在HTML中包含腳本時,您設置了什麼類型的arttribute?我遇到了設置爲type="application/javascript"的情況,它必須設置爲type="text/javascript"。如果您是Dreamweaver用戶,應用程序/ javascript將首先列出,並且它是「正確的」選擇...除了IE瀏覽器(至少6/7,可能8)不理解此設置。你必須使用文字/ JavaScript。

當我聽說快樂的FF腳本和缺少IE腳本時,這是我首先想到的。我曾經受過這種創傷。 :)

+0

它們都是以text/javascript形式引入的... – sunwukung

0

因爲它在IE8上失敗我建議你使用Web開發工具包,對我來說我按F12,然後你可以開始調試,這將重新加載你的頁面,你應該看到錯誤行是。

0

如果你確定你包括了正確的jQuery腳本文件,仍然收到此錯誤,請檢查其他的js文件不衝突的或重寫方法

相關問題