Переключиться на выбранную вкладку по имени в вкладках Jquery-UI

Если у меня есть три вкладки:

<div id="tabs">
    <ul>
        <li><a href="#sample-tab-1"><span>One</span></a></li>
        <li><a href="#sample-tab-2"><span>Two</span></a></li>
        <li><a href="#sample-tab-3"><span>Three</span></a></li>
    </ul>
</div>

Я хотел бы переключиться на #sample-tab-2 по его имени. Я знаю, что могу переключиться на вкладку, если знаю ее номер, но в случае, с которым я столкнулся, я этого не узнаю.

Примечания: JQuery 1.3.1/JQuery-UI 1.6rc6


person Rob    schedule 23.02.2009    source источник
comment
Итак, вы хотите выбрать вкладку «Три» независимо от того, где она находится? Почему вы знаете слово «Три», но не знаете идентификатор или число? Этот подход может быть проблематичным, если вы когда-нибудь будете переводить свой сайт... не могли бы вы рассказать о проблеме подробнее?   -  person Mr. Shiny and New 安宇    schedule 23.02.2009
comment
Конечно, то, что я пытаюсь сделать, описано здесь: stackoverflow.com/questions/572376/ Подход, который я сейчас пытаюсь использовать, - это изменить хэш, чтобы добавить символ к имя хеша, а затем при загрузке страницы выберите эту вкладку (без символа)   -  person Rob    schedule 23.02.2009
comment
В основном ‹a href=#_sample-tab-1› устанавливает для window.location значение #sample-tab-1, а затем, когда страница загружается ( index.php#sample-tab-1), переключается на #_sample-tab -1   -  person Rob    schedule 23.02.2009
comment
у вас нет идентификатора/имени, чтобы даже ссылаться на ваш пример кода   -  person Mike Henke    schedule 06.07.2011
comment
согласно последним документам $("#tabs").tabs("select", "#sample-tab-1"); должно работать   -  person Eran Medan    schedule 25.04.2012
comment
Начиная с JqueryUI 1.10: $("#tabs").tabs("option", "active", $(tabName + "Selector").index()); см. пример на jsfiddle.net/vpJC3.   -  person JBCP    schedule 08.02.2013


Ответы (15)


Я не мог заставить предыдущий ответ работать. Я сделал следующее, чтобы получить индекс вкладки по имени:

var index = $('#tabs a[href="#simple-tab-2"]').parent().index();
$('#tabs').tabs('select', index);
person Christian George    schedule 10.01.2011
comment
Этот ответ больше не является кратчайшим способом сделать это, поскольку jQueryUI просто развился с 2010 года. если вы один из тех, кто принимает выбранный / получивший наибольшее количество голосов ответ как должное и не прокручивает вниз до других, вот хороший синтаксический сахар что было добавлено с: $("#tabs").tabs("select", "#sample-tab-1"); - person Eran Medan; 14.10.2012
comment
JqueryUI снова эволюционировал, вот новое решение: $("#tabs").tabs("option", "active", $(tabName + "Selector").index());, см. этот jsfiddle для получения дополнительной информации: jsfiddle.net/vpJC3< /а> - person JBCP; 08.02.2013
comment
Вы должны вычесть 1 из индекса. Потому что индекс массива и индекс элемента отличаются на 1. Напишите так: $(#tabs).tabs().tabs(option, active, $(#Tab-1).index() - 1); - person Rahatur; 01.01.2014
comment
Но в этом коде я получаю эту ошибку.... не могу вызывать методы на вкладках до инициализации; попытался вызвать метод 'select' .. Знаете ли вы, что @christian - person Vicky; 21.03.2014
comment
NB: Решения, использующие индекс целевого элемента отображения, полагаются на то, что элементы отображения находятся в том же порядке, что и элементы списка! - person Mark; 23.05.2014

Кажется, что использование идентификатора работает так же, как индекс, например. просто сделать это будет работать из коробки...

$("#tabs").tabs("select", "#sample-tab-1");

Это хорошо описано в официальной документации:

«Выберите вкладку, как если бы она была нажата. Второй аргумент — это отсчитываемый от нуля индекс вкладки, которая будет выбрана , или селектор идентификатора панели, с которой связана вкладка (идентификатор фрагмента href вкладки, например, хэш , указывает на идентификатор панели)."

Я предполагаю, что это было добавлено после того, как был задан этот вопрос и, вероятно, после большинства ответов.

person Eran Medan    schedule 08.04.2012
comment
Ваш пример должен быть просто $("#tabs").tabs("select", "#sample-tab-1"); в соответствии с новейшими документами. - person iano; 25.04.2012
comment
@iano Вы правы ... документы, похоже, изменились ... спасибо - person Eran Medan; 25.04.2012
comment
@JBCP выглядит хорошо, но я боялся, что так оно и будет. почему они вернулись к менее удобному API без каких-либо объяснений, я уверен, что у них есть какое-то объяснение, я не могу его придумать. - person Eran Medan; 08.02.2013

$('#tabs').tabs('select', index); 

Методы select не поддерживаются в jquery ui 1.10.0.http://api.jqueryui.com/tabs/

Я использую этот код и работаю правильно:

  $('#tabs').tabs({ active: index });
person hamid reza mansouri    schedule 14.02.2013
comment
Хорошо, что Хамид упомянул версию jquery ui. Жаль, что они недавно изменили API и удалили основные функции, такие как добавление вкладок (устарело в 1.9, удалено в 1.10). Я не думаю, что смогу заглянуть за это в их философствование. Это как продавать машину с силовым агрегатом, но без сидений. - person kovacsbv; 06.02.2014

Вы можете получить индекс вкладки по имени с помощью следующего скрипта:

var index = $('#tabs ul').index($('#simple-tab-2'));
$('#tabs ul').tabs('select', index);
person bdukes    schedule 23.02.2009
comment
Это не работает со мной. Ответ Кристиана Джорджа сработал. Какую версию jquery вы используете? Я использую 1.4.3. - person Nap; 10.06.2011
comment
@Nassign да, похоже, мой ответ не работает (он пытается выбрать li, как будто у него есть идентификатор simple-tab-2, а не href). - person bdukes; 10.06.2011
comment
Есть ли способ изменить вкладки с помощью этого кода при привязке страницы? - person Michael Capobianco; 19.06.2012
comment
Проблема с получением index() идентификатора панели заключается в том, что index() возвращает индекс элемента по отношению к родительскому элементу HTML, поэтому вы можете подумать, что первая панель возвращает 0, но на самом деле она вернет 1, потому что index( ) будет учитывать указанный выше UL - person htmlr; 05.02.2014

Только этот код реально работает!

$('#tabs').tabs();
$('#tabs').tabs('select', '#sample-tab-2');
person xmoonlight    schedule 21.04.2012

Используйте эту функцию:

function uiTabs(i){
    $("#tabs").tabs("option", "selected", i);
}

И используйте следующий код для переключения между вкладками:

<a onclick="uiTabs(0)">Tab 1</a>
<a onclick="uiTabs(1)">Tab 2</a>
<a onclick="uiTabs(2)">Tab 3</a>
person Hamidreza    schedule 09.12.2011

Единственный практический способ получить нулевой индекс ваших вкладок — пройтись по каждому из элементов, составляющих набор вкладок (LI>A s), и сопоставить их внутренний текст. Вероятно, это можно сделать более чистым способом, но вот как я это сделал.

$('#tabs ul li a').each(function(i) {
    if (this.text == 'Two') {$('#reqTab').val(i)}
});

$("#tabs").tabs({
    selected: $('#reqTab').val()
});

Вы можете видеть, что я использовал скрытое поле ‹input id="reqTab"› на странице, чтобы убедиться, что переменная перемещается из одной функции в другую.

ПРИМЕЧАНИЕ. Есть небольшая загвоздка — выбор вкладок после активации набора вкладок, похоже, не работает так, как рекламируется в пользовательском интерфейсе jQuery 1.8, поэтому я использовал идентифицированный индекс из моего первого прохода для инициализации набора вкладок. с выбранной нужной вкладкой.

person Wes    schedule 01.05.2010

Следующая часть работала для меня

$($("#tabs")[0]).tabs({selected: 1});

Надеюсь это поможет!

person Sandeep    schedule 19.01.2012

попробуйте это: вкладка "выбрать" / "активная"

<article id="gtabs">
    <ul>
        <li><a href="#syscfg" id="tab-sys-cfg" class="tabtext">tab One</a></li>
        <li><a href="#ebsconf" id="tab-ebs-trans" class="tabtext">tab Two</a></li>
        <li><a href="#genconfig" id="tab-general-filter-config" class="tabtext">tab Three</a></li>
    </ul>

var index = $('#gtabs a[href="#general-filter-config"]').parent().index();

// `'select' does not support in jquery ui version 1.10.0

$('#gtabs').tabs('select', index);  

альтернативное решение: используйте «активный»:

$('#gtabs').tabs({ active: index });
person Muru Bakthavachalam    schedule 26.03.2014

Если вы меняете hrefs, вы можете присвоить идентификатор ссылкам <a href="#sample-tab-1" id="tab1"><span>One</span></a>, чтобы вы могли найти индекс вкладки по его идентификатору.

person kiev    schedule 06.07.2009

Ответ @bduke на самом деле работает с небольшой настройкой.

var index = $("#tabs>div").index($("#simple-tab-2"));
$("#tabs").tabs("select", index);

Выше предполагается что-то похожее на:

<div id="tabs">
  <ul>
    <li><a href="#simple-tab-0">Tab 0</a></li>
    <li><a href="#simple-tab-1">Tab 1</a></li>
    <li><a href="#simple-tab-2">Tab 2</a></li>
    <li><a href="#simple-tab-3">Tab 3</a></li>
  </ul>
  <div id="simple-tab-0"></div>
  <div id="simple-tab-1"></div>
  <div id="simple-tab-2"></div>
  <div id="simple-tab-3"></div>
</div>

jQueryUI теперь поддерживает вызов «выбрать» с помощью селектора ID/HREF вкладки, но при создании вкладок параметр «выбрано» по-прежнему поддерживает только числовой индекс.

Мой голос принадлежит бдукесу за то, что он наставил меня на правильный путь. Спасибо!

person cautionbug    schedule 24.10.2011

Вот пример кода для получения выбранной вкладки по имени. Я надеюсь, что это поможет вам найти свое решение:

<html>
<head>
<script type="text/javascript"><!-- Don't forget jquery and jquery ui .js files--></script>
<script type="text/javascript">
   $(document).ready(function(){
     $('#tabs').show();

     // shows the index and tab title selected
     $('#button-id').button().click(function(){
         var selTab = $('#tabs .ui-tabs-selected');
         alert('tab-selected: '+selTab.index()+'-'+ selTab.text());
     });
  });
</script>
</head>
<body>
   <div id="tabs">
      <ul id="tablist">
            <li><a href='forms/form1.html' title="form_1"><span>Form 1</span></a></li>
            <li><a href='forms/form2' title="form_2"><span>Form 2</span></a></li>
      </ul>
   </div>
    <button id="button-id">ClickMe</button>
</body>
</html>
person Vikram    schedule 23.03.2012

$('#tabs a[href="#sample-tab-1"]').click();

или вы можете присвоить идентификатор ссылкам

<a href="#sample-tab-1" id="tab1">span>One</span></a>

так что вы можете найти его идентификатор.

$('#tab1').click();
person Dimasbka    schedule 03.08.2018

Установите конкретный индекс вкладки как активный:

$(this).tabs({ active: # }); /* Where # is the tab index. The index count starts at 0 */

Сделать последнюю вкладку активной

$(this).tabs({ active: -1 });

Установить конкретную вкладку по ID:

$(this).tabs({ active: $('a[href="#tab-101"]').parent().index() });
person Carl    schedule 21.08.2018

У меня были проблемы с тем, чтобы какие-либо ответы работали, поскольку они были основаны на более старых версиях пользовательского интерфейса JQuery. Мы используем версию 1.11.4 (справочник CDN ).

Вот мой Fiddle с рабочим кодом: http://jsfiddle.net/6b0p02um/ В итоге я соединил вместе биты из четырех или пяти разных потоков, чтобы заставить мою работать:

    $("#tabs").tabs(); 

    //selects the tab index of the <li> relative to the div it is contained within
    $(".btn_tab3").click(function () {
        $( "#tabs" ).tabs( "option", "active", 2 );
    });         

    //selects the tab by id of the <li>
    $(".btn_tab3_id").click(function () {
      function selectTab(tabName) {
          $("#tabs").tabs("option", "active", $(tabName + "").index());
      }

      selectTab("#li_ui_id_3");
    });
person David Pickering    schedule 26.09.2017