Вкладки пользовательского интерфейса jQuery – как получить индекс выбранной в данный момент вкладки
-
08-07-2019 - |
Вопрос
Я знаю, что этот конкретный вопрос был спрашивал раньше, но я не получаю никаких результатов, используя bind()
мероприятие на jQuery UI Tabs
плагин.
мне просто нужно index
вновь выбранной вкладки, чтобы выполнить действие при нажатии на вкладку. bind()
позволяет мне подключиться к событию выбора, но мой обычный метод получения выбранной в данный момент вкладки не работает.Он возвращает ранее выбранный индекс вкладки, а не новый:
var selectedTab = $("#TabList").tabs().data("selected.tabs");
Вот код, который я пытаюсь использовать, чтобы получить выбранную в данный момент вкладку:
$("#TabList").bind("tabsselect", function(event, ui) {
});
Когда я использую этот код, объект пользовательского интерфейса возвращается undefined
.Судя по документации, это должен быть объект, который я использую для подключения к вновь выбранному индексу с помощью ui.tab.Я попробовал это на начальном этапе tabs()
звонить, а также самостоятельно.Я делаю здесь что-то не так?
Решение
Для версий пользовательского интерфейса JQuery до 1.9 : ui.index
из event
- это то, что вам нужно.
Для JQuery UI 1.9 или более поздней версии : см. ответ Джорджо Лупарии ниже. р>
Другие советы
Если вам нужно получить индекс табуляции вне контекста события табуляции, используйте это:
function getSelectedTabIndex() {
return $("#TabList").tabs('option', 'selected');
}
Обновлять:В версии 1.9 слово «выбрано» заменено на «активно».
$("#TabList").tabs('option', 'active')
ОБНОВЛЯТЬ [Вс 26.08.2012] Этот ответ стал настолько популярным, что я решил превратить его в полноценный блог/руководство.
Пожалуйста, посетите Мой блог здесь чтобы увидеть новейшую легкодоступную информацию для работы с вкладки в jQueryUI
Также включено (в том числе в блог) jsFiddle
Обновлять!Пожалуйста, обрати внимание:В более новых версиях jQueryUI (1.9+) ui-tabs-selected
был заменен на ui-tabs-active
. !!!
Я знаю, что эта тема старая, но я не видел упоминания о том, как получить «выбранную вкладку» (в настоящее время выпадающую панель) откуда-либо, кроме «событий вкладки».У меня есть простой способ...
var curTab = $('.ui-tabs-panel:not(.ui-tabs-hide)');
А чтобы легко получить индекс, конечно, есть способ, указанный на сайте...
var $tabs = $('#example').tabs();
var selected = $tabs.tabs('option', 'selected'); // => 0
Однако вы можете использовать мой первый метод, чтобы довольно легко получить индекс и все, что вы хотите об этой панели...
var curTab = $('.ui-tabs-panel:not(.ui-tabs-hide)'),
curTabIndex = curTab.index(),
curTabID = curTab.prop("id"),
curTabCls = curTab.attr("class");
// etc ....
ПС.Если вы используете переменную iframe, то .find('.ui-tabs-panel:not(.ui-tabs-hide)'), вам будет легко сделать это и для выбранных вкладок во фреймах.Помните, что jQuery уже проделал всю тяжелую работу, не нужно изобретать велосипед!
Просто чтобы расширить (обновлено)
Вопрос был поднят мне: «Что, если в обзоре будет более одной области вкладок?» Опять же, просто подумайте, используйте мою ту же настройку, но используйте идентификатор, чтобы определить, какие вкладки вы хотите получить.
Например, если у вас есть:
$('#example-1').tabs();
$('#example-2').tabs();
И вы хотите, чтобы текущая панель второй вкладки была установлена:
var curTabPanel = $('#example-2 .ui-tabs-panel:not(.ui-tabs-hide)');
И если вам нужна вкладка АКТУАЛЬНО, а не панель (действительно просто, поэтому я не упоминал об этом раньше, но полагаю, что сделаю это сейчас, просто для подробностей)
// for page with only one set of tabs
var curTab = $('.ui-tabs-selected'); // '.ui-tabs-active' in jQuery 1.9+
// for page with multiple sets of tabs
var curTab2 = $('#example-2 .ui-tabs-selected'); // '.ui-tabs-active' in jQuery 1.9+
Опять же, помните, что всю тяжелую работу выполнила jQuery, не думайте так усердно.
Если вы используете JQuery UI версии 1.9.0 или выше, вы можете получить доступ к ui.newTab.index () внутри своей функции и получить то, что вам нужно.
Для более ранних версий используйте ui.index .
Когда вы пытаетесь получить доступ к объекту пользовательского интерфейса? Пользовательский интерфейс будет неопределенным, если вы попытаетесь получить к нему доступ вне события bind. Кроме того, если эта строка
var selectedTab = $("#TabList").tabs().data("selected.tabs");
запускается в таком случае:
$("#TabList").bind("tabsselect", function(event, ui) {
var selectedTab = $("#TabList").tabs().data("selected.tabs");
});
selectedTab будет равен текущей вкладке в тот момент времени (" предыдущий " one.) Это потому, что " tabsselect " событие вызывается до того, как выбранная вкладка становится текущей вкладкой. Если вы все еще хотите сделать это таким образом, используйте & Quot; tabsshow & Quot; вместо этого получится, что selectedTab приравнивается к нажатой вкладке.
Однако это кажется слишком сложным, если вам нужен только индекс. ui.index изнутри события или $ (" #TabList "). tabs (). data (" selected.tabs ") вне события должно быть все что тебе нужно.
var $tabs = $('#tabs-menu').tabs();
// jquery ui 1.8
var selected = $tabs.tabs('option', 'selected');
// jquery ui 1.9+
var active = $tabs.tabs('option', 'active');
это изменилось в версии 1.9
что-то вроде
$(document).ready(function () {
$('#tabs').tabs({
activate: function (event, ui) {
var act = $("#tabs").tabs("option", "active");
$("#<%= hidLastTab.ClientID %>").val(act);
//console.log($(ui.newTab));
//console.log($(ui.oldTab));
}
});
if ($("#<%= hidLastTab.ClientID %>").val() != "")
{
$("#tabs").tabs("option", "active", $("#<%= hidLastTab.ClientID %>").val());
}
});
должен быть использован. Это работает нормально для меня; -)
Если кто-то попытался получить доступ к вкладкам из iframe, вы можете заметить, что это невозможно. div
вкладки никогда не помечается как выбранные, как скрытые или не скрытые. Сама ссылка является единственной частью, помеченной как выбранная.
<li class="ui-state-default ui-corner-top ui-tabs-selected ui-state-active ui-state-focus"><a href="#tabs-4">Tab 5</a></li>
Ниже приведено значение href
ссылки, которое должно совпадать с идентификатором контейнера вкладок:
jQuery('.ui-tabs-selected a',window.parent.document).attr('href')
Это также должно работать вместо: $tabs.tabs('option', 'selected');
Лучше в том смысле, что вместо того, чтобы просто получить индекс вкладки, он дает вам фактический идентификатор вкладки.
самый простой способ сделать это
$("#tabs div[aria-hidden='false']");
и для индекса
$("#tabs div[aria-hidden='false']").index();
В случае, если вы найдете активную вкладку «Индекс», а затем укажите «Активная вкладка»
Сначала получите Активный индекс
var activeIndex = $("#panel").tabs('option', 'active');
Затем с помощью класса css получите панель содержимого вкладки
// this will return the html element
var element= $("#panel").find( ".ui-tabs-panel" )[activeIndex];
теперь обернул его в объект jQuery для дальнейшего использования
var tabContent$ = $(element);
здесь я хочу добавить две информации, с которыми класс .ui-tabs-nav
связан с навигацией, и .ui-tabs-panel
связан с панелью содержимого вкладки. в этой демонстрационной ссылке на веб-сайте jquery ui вы увидите, что этот класс используется - http://jqueryui.com/tabs/ #manipulation р>
$( "#tabs" ).tabs( "option", "active" )
тогда у вас будет индекс вкладки от 0
простой
Попробуйте сделать следующее:
var $tabs = $('#tabs-menu').tabs();
var selected = $tabs.tabs('option', 'selected');
var divAssocAtual = $('#tabs-menu ul li').tabs()[selected].hash;
Я нашел код ниже, делает свое дело. Устанавливает переменную индекса новой выбранной вкладки
$("#tabs").tabs({
activate: function (e, ui) {
currentTabIndex =ui.newTab.index().toString();
}
});
Вы можете опубликовать ответ ниже в своем следующем сообщении
var selectedTabIndex= $("#tabs").tabs('option', 'active');
Другой способ получить индекс выбранной вкладки:
var index = jQuery('#tabs').data('tabs').options.selected;
$("#tabs").tabs({
load: function(event, ui){
var anchor = ui.tab.find(".ui-tabs-anchor");
var url = anchor.attr('href');
}
});
в URL переменной вы получите HREF/URL текущей вкладки
возьмите скрытую переменную, например '<input type="hidden" id="sel_tab" name="sel_tab" value="" />'
и в событии onclick каждой вкладки напишите код, например...
<li><a href="#tabs-0" onclick="document.getElementById('sel_tab').value=0;" >TAB -1</a></li>
<li><a href="#tabs-1" onclick="document.getElementById('sel_tab').value=1;" >TAB -2</a></li>
вы можете получить значение «sel_tab» на опубликованной странице.:) , простой !!!
Если вы хотите убедиться, что ui.newTab.index()
доступен во всех ситуациях (локальные и удаленные вкладки), то вызовите его в функции activ как документация гласит:
$("#tabs").tabs({
activate: function(event, ui){
alert(ui.newTab.index());
// You can also use this to set another tab, see fiddle...
// $("#other-tabs").tabs("option", "active", ui.newTab.index());
},
});
$("#tabs").tabs({
activate: function(event, ui) {
new_index = ui.newTab.index()+1;
//do anything
}
});