2010-08-06 2 views
7

Есть ли способ перезагрузить выбранную вкладку. Я знаю, что есть функция .load(). Но ему нужен индекс вкладок, и я, похоже, не вижу способ захватить выбранный идентификатор вкладок.JQuery UI - перезагрузка выбранной вкладки?

+0

Так что ваш вопрос действительно, как получить индекс выбранной вкладки в? –

+0

Это решит мою проблему, да. – Renari

ответ

24

Обновление: В jQuery 1.9 опция selected переименована в active. См. attomman's answer.

Чтобы получить текущий выбранный индекс, используйте функцию tabs('option','selected').

Например, если у вас есть кнопка #button#tabs элемент выполнен в виде закладок), где вы хотите, чтобы получить индекс, выполните следующие действия:

$("#button").click(function() { 
    var current_index = $("#tabs").tabs("option","selected"); 
}); 

Вот демо: http://jsfiddle.net/sVgAT/


Чтобы ответить на вопрос, указанный в названии, в JQuery 1.8 и ранее, вы могли бы сделать:

var current_index = $("#tabs").tabs("option","selected"); 
$("#tabs").tabs('load',current_index); 

И в JQuery 1.9 и позже, вы могли бы сделать:

var current_index = $("#tabs").tabs("option","active"); 
$("#tabs").tabs('load',current_index); 
+0

Спасибо, это именно то, что я искал. – Renari

+0

Проблема с этим решением заключается в том, что он дважды перезагружает не выбранные вкладки (два раза на сервере). –

+2

К сожалению, с последней версии пользовательского интерфейса jQuery это больше не работает. Вы должны заменить '' selected "' на '' active '', согласно нижеприведенному ответу. – aroth

1

мне удалось получить эту работу, но теперь загружает первую вкладку в два раза, когда он не активен. Если у кого-то есть больше советов по этому поводу, которые будут высоко оценены. console showing a cancelled request to the server

Вы можете видеть, что запрос выполняется дважды на сервер, но первый запрос успешно завершен, поэтому он отменяет второй. Не уверен, что это проблема или нет.? Но Im не успокоило, видя его в консоли

constructor: (@element) -> 
    @tabIndex = 0 
    @tabs = @element.find('#tabs') 
    @tabs.tabs 
     spinner: "Loading.." 
     cache: false 
     ajaxOptions: 
     cache: false 
     error: (xhr, status, index, anchor) -> 
      $(anchor.hash).html "Couldn't load this tab. We'll try to fix this as soon as possible." 

    #add custom load to make sure they always reload even the current tab when clicked 
    @element.find('ul li a').click (e) => 
     if @tabIndex is @tabs.tabs('option', 'selected') 
     @tabs.tabs 'load', @tabs.tabs('option', 'selected') 
     @tabIndex = @tabs.tabs('option', 'selected') 
+0

Это должен быть отдельный вопрос, чтобы люди могли правильно ответить :) –

7

Саймен имели правильный ответ, но теперь это было устаревшим, начиная с JQuery UI 1.9

http://jqueryui.com/upgrade-guide/1.9/#deprecated-selected-option-renamed-to-active

Теперь вы используете «активный» вместо из 'выбрано'

Поэтому код будет выглядеть следующим образом:

var current_index = $("#tabs").tabs("option","active"); $("#tabs").tabs('load',current_index);

2

В случае, если кто-либо еще наткнется на этот вопрос и, как и я, - использует вкладки jQuery EasyUI, ответ Симена выше не будет работать.Вместо того, чтобы обновить вкладку, используйте:

var tab = $('#tt').tabs('getSelected'); 
tab.panel('refresh'); 

Где tt является id вашей вкладки группы, созданной с помощью

<div id="tt" class="easyui-tabs"> 
+0

Это действительно работало для новой версии Easy UI, спасибо – JacobChan

0

Скачать этот плагин для печенья:

http://plugins.jquery.com/cookie/

Вставка jQuery cookie на вашу страницу

<script src="jquery.cookie.js"></script> 

и добавить:

$(".tabs").click(function() { 
    //getter , get the active tab 
    var active = $("#tabs").tabs("option", "active"); 
    $.cookie("tabs_selected", active); 
}); 

var cookieValue = $.cookie("tabs_selected"); 
// setter, set the active tab stocked 
$("#tabs").tabs("option", "active",cookieValue); 
Смежные вопросы