2012-12-22 38 views
4

我遇到了jquery ui選項卡的奇怪問題。Jquery UI - Tabs反應燒

下面的代碼:

<div class="ym-gbox"> 
    <script> 
    $(function() { 
     $("#tabs").tabs(); 
    }); 
    </script> 
      <h1>Versions Übersicht</h1> 
    <br /> 
    <div id="tabs"> 
     <ul> 
      <li><a href="#tabs-1">System Kern</a></li> 
      <li><a href="#tabs-2">Anwendungen</a></li> 
      <li><a href="#tabs-3">Bibliotheken</a></li> 
     </ul> 
     <div id="tabs-1"> 
      <table width="100%" border="0" cellpadding="0" cellspacing="0" class="bordertable"> 
<tr><th>Name</th><td>System Kern</td></tr> 
<tr><th>Version</th><td>1.0.0 </td></tr> 
<tr><th>Beschreibung</th><td></td></tr><tr><td colspan="2">System Kern</td></tr> 
<tr><th>Webseite</th><td>http://www.dsws.biz</td></tr> 
<tr><th>Lizenz</th><td>Dark Star Web Services Source Lizenz</td></tr> 
<tr><th>Autor</th><td> 
</td></tr> 
</table> 
     </div> 
     <div id="tabs-2"> 
      b 
     </div> 
     <div id="tabs-3"> 
      c 
     </div> 
    </div> 
    </div> 

只要在頁面加載,完整的頁面加載到選項卡標籤。 我真的不知道爲什麼發生這種情況。

+1

您是否看到[這裏](http://jsfiddle.net/QGYDb/)的問題? –

+0

它在那裏顯示正確 –

+0

它顯示正確的選項卡。 但之後主頁被加載。我對此有點困惑。 –

回答

0

我發現問題的核心。 系統不會阻止默認處理程序被解僱。 對於鏈接,它是一個重定向到頁面。 如果您在click處理程序中添加preventDefault並根據您想要執行的操作處理click事件(例如,將Tab更改爲選定的選項卡),則可以繞過此操作。

例如:

$('#myTab a').click(function (e) { 
    e.preventDefault() 
    $(this).tab('show') 
}); 

這個例子是從該頁面採取:http://getbootstrap.com/javascript/#tabs

今天我度過了一個非常類似的問題。 添加此代碼後,它的工作沒有問題。

1

我有一個奇怪的問題,該選項卡加載了整個頁面。它似乎是一個無限循環,標籤內容一遍又一遍地加載完整的頁面。

這種情況發生在ver。 1.9.2 jQueryUI和ver。 1.8.3的jQuery但不是在ver。 jQueryUI和ver。1.8.17 1.8.3的jQuery。這就是爲什麼jsfiddle不顯示它。

Chris我也使用mod_rewrite模塊,但我真的需要它,所以它不是一個跳過它的選項,也不使用基於Ajax的版本。

+0

我沒有找到其他解決方案,然後ajax推。但我仍然在尋找一些東西。 –

1

解決的辦法是從您的頁面中刪除HTML href =「http:// site_name」/> HTML <。 (基礎標籤)

我有同樣的問題,並由於某種原因修復它。我正在使用ui-1.10.2

+0

但這個解決方案的問題是,如果你使用重寫,所有的圖像需要絕對地址,而不是相對於基地址 –

3

正如用戶user2235863所說,您需要從代碼中刪除基本標記才能使其正常工作。我不知道它爲什麼有效,但它是。

但是,這種修改可以有一個副作用,如加載相對url圖像。解決的辦法是使用JavaScript後頁面加載之前標籤初始化刪除基礎標籤:

jQuery(function($){ 
    $('base').remove(); 
    $('#tabs_div').tabs(); 
}); 
1

如果卸下底座標籤將不會爲您的網站的環境中工作(因爲URL重寫或使用其他類似技術)的解決方案生成一個包含當前頁面完整URL的變量,並將其寫入選項卡HREFs的開頭,然後再與#標籤號匹配。通過這種方式,jQuery UI將識別您的標籤內容對當前頁面而言是本地的,並且不會嘗試使用存儲在BASE標籤中的URL通過AJAX加載它。一個PHP的例子是:

$url = "http" . ((!empty($_SERVER['HTTPS']) && strtolower($_SERVER['HTTPS']) != 'off') ? "s://" : "://") . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']; 

可能有更完整或準確的方法來獲取正確的當前URL,特別是如果你使用的是負載平衡器,在回答這個堆棧的問題:

http://stackoverflow.com/questions/6768793/php-get-the-full-url 
4

對我來說,這個確切的問題是與基本標記有關,無法通過點擊事件解決克里斯的想法引用。如果您的網址正在被重寫爲擁有完整的絕對網址,也可能會發生這種情況。通過緩存工具或的.htaccess

所以,如果你的標籤,正在改寫爲<a href="http://example.com/page/#tab1">tabname</a>

然後向溶液中是初始化標籤之前刪除的完整URL。以下內容(擴展爲保持簡單)將刪除所有導致#

jQuery("#mytabs ul li a").each(function() { 
    var current = jQuery(this).attr("href"); 
    var n = current.indexOf("#"); 
    jQuery(this).attr("href", current.substr(n)); 
}); 

jQuery("#mytabs").tabs(..)