2010-10-30 189 views
1

我試圖建立一個包含一些選項卡的網頁,通過點擊一個選項卡,它將使用AJAX加載標籤下的內容。IE:AJAX選項卡不工作

問題:在舊版本的Internet Explorer中,單擊選項卡將導致重定向到選項卡鏈接,而不是通過AJAX將該內容加載到該鏈接後面。

我的HTML代碼:

<ul id="nav"> 
    <li><a href="page_1.html">Page 1</a></li> 
    <li><a href="page_2.html">Page 2</a></li> 
    <li><a href="page_3.html">Page 3</a></li> 
</ul> 

<div id="ajax-content">This is default text, which will be replaced</div> 

我的jQuery代碼:

$(document).ready(function() { 
    $("#nav li a").click(function() { 

     $("#ajax-content").empty().append("<div id='loading'><img src='images/loading.gif' alt='Loading' /></div>"); 
     $("#nav li a").removeClass('current'); 
     $(this).addClass('current'); 

     $.ajax({ 
      url: this.href, 
      success: function(html) { 
       $("#ajax-content").empty().append(html); 
      } 
     }); 
     return false; 
    }); 
}); 

回答

0

我相信,單擊處理程序的末尾添加event.stopPropagation()(你還需要引用event爲處理程序參數: $("#nav li a").click(function(event) {...});)會做到這一點。

+0

不,不管怎樣,點擊處理程序結束處的「返回false」都會這樣做。 (很難說它在那裏,因爲他的縮進被搞砸了,但它在那裏。) – 2010-10-30 13:25:23

1

如您所知,點擊處理程序末尾的return false;應同時停止冒泡並阻止默認操作。但是,當然,如果你永遠不會到達那裏,那麼默認會繼續。

所以問題必須是:你是否已經通過調試器遍歷代碼,看它是否拋出錯誤和/或選擇器應該匹配的所有內容是否匹配?我的猜測是,由於某些原因,點擊處理程序中的某些內容在IE上失敗,因此您的return false不會發生,或者(當然),點擊處理程序根本沒有被觸發。多年來,在IE上有幾個腳本調試器,最近的免費Visual Studio Express

查找只發生在IE上的錯誤的一個特別豐富的地方在於它的命名空間問題,尤其是因爲你說這發生在IE的「老」版本上。詳細信息請參見this blog post,但基本上通過IE7 IE的所有方式將幾個應該完全不同的名稱空間混合在一起(例如,它將所有idname值視爲位於相同的名稱空間中,因此如果您有一個元素,並且其他元素爲name="foo"id="foo",IE會混淆)。這個拼湊在一起的命名空間將影響你的jQuery選擇器,因爲使用ID的jQuery選擇器最終使用內置的document.getElementById,而IE(6和7)使用具有該功能的混合命名空間。