вкладки jQuery - получение нового выбранного индекса - PullRequest
26 голосов
/ 09 октября 2008

Ранее я использовал расширение jquery-ui tabs для загрузки фрагментов страницы через ajax, а также для скрытия или выявления скрытых div s на странице. Оба эти метода хорошо документированы, и у меня там не было проблем.

Теперь, однако, я хочу сделать что-то другое с вкладками. Когда пользователь выбирает вкладку, он должен полностью перезагрузить страницу - причина в том, что содержимое каждого раздела с вкладками довольно дорогое, поэтому я не хочу просто отправлять их все сразу и использовать обычный метод переключить отображение: нет, чтобы показать их.

Мой план состоит в том, чтобы перехватить событие select вкладок и заставить эту функцию перезагрузить страницу, управляя document.location.

Как в обработчике select я могу получить недавно выбранный индекс вкладки и html объект LI, которому он соответствует?

$('#edit_tabs').tabs(  {
        selected: 2,     // which tab to start on when page loads
        select: function(e, ui) {
            var t = $(e.target);
            // alert("data is " +  t.data('load.tabs'));  // undef
            // alert("data is " +  ui.data('load.tabs'));  // undef

            // This gives a numeric index...
            alert( "selected is " + t.data('selected.tabs') )
            // ... but it's the index of the PREVIOUSLY selected tab, not the
            // one the user is now choosing.  
            return true;

            // eventual goal is: 
            // ... document.location= extract-url-from(something); return false;
        }
});

Есть ли атрибут события или объекта пользовательского интерфейса, который я могу прочитать, который даст индекс, идентификатор или объект вновь выбранной вкладки или тег привязки внутри нее?

Или есть ли лучший способ использовать вкладки для перезагрузки всей страницы?

Ответы [ 8 ]

37 голосов
/ 09 октября 2008

Я бы посмотрел на события для вкладок. Следующее взято из документов jQuery:

 $('.ui-tabs-nav').bind('tabsselect', function(event, ui) {
     ui.options // options used to intialize this widget
     ui.tab // anchor element of the selected (clicked) tab
     ui.panel // element, that contains the contents of the selected (clicked) tab
     ui.index // zero-based index of the selected (clicked) tab
 });

Похоже, ui.tab - это путь.

7 голосов
/ 28 января 2013

в jQuery UI - v1.9.2

ui.newTab.index()

чтобы получить базовый 0 индекс активной вкладки

5 голосов
/ 25 августа 2010
select: function(e, ui){var index=ui.index;}

хорошо работает для меня. см .: http://api.jqueryui.com/tabs/#events

0 голосов
/ 10 октября 2012

Быстрый просмотр документации дает нам решение:

$('#edit_tabs').tabs({ selected: 2 }); 

Приведенный выше оператор активирует третью вкладку.

0 голосов
/ 10 сентября 2011

Я нашел два способа выполнить это требование, так как мне сложно разместить код здесь, вы можете посмотреть его на http://ektaraval.blogspot.com/2011/09/calling-javascript-when-jquery-ui-tab.html

Надеюсь, что это помогает кому-то ..

0 голосов
/ 14 июня 2009

Или другой вариант, который я использовал для своего сайта, это. Это базовая система навигации по вкладкам UL / Div. Ключ к открытию правильной вкладки после нажатия на ссылку на другую страницу с прикрепленной хэш-меткой заключается в простой фильтрации вашего UL для #example, соответствующего тому, что передается через браузер. Это так.

Вот пример HTML:

    <div id="tabNav">

  <ul class="tabs">
    <li><a href="#message">Send a message</a></li>
    <li><a href="#shareFile">Share a file</a></li>
    <li><a href="#arrange">Arrange a meetup</a></li>
  </ul>
</div>

<div id="tabCont">

  <div id="message">
    <p>Lorem ipsum dolor sit amet.</p>
  </div>
  <div id="shareFile">
    <p>Sed do eiusmod tempor incididunt.</p>
  </div>
  <div id="arrange">
    <p>Ut enim ad minim veniam</p>
  </div>

</div>

И Jquery, чтобы это произошло:

$(document).ready(function() {
$(function () {
    var tabs = [];
    var tabContainers = [];

    $('ul.tabs a').each(function () {
      // note that this only compares the pathname, not the entire url
      // which actually may be required for a more terse solution.
        if (this.pathname == window.location.pathname) {
            tabs.push(this);
            tabContainers.push($(this.hash).get(0));
        }
    });

    $(tabs).click(function () {
        // hide all tabs
        $(tabContainers).hide().filter(this.hash).show();


        // set up the selected class
        $(tabs).removeClass('active');
        $(this).addClass('active');

        return false;

});




 $(tabs).filter(window.location.hash ? '[hash=' + window.location.hash + ']' : ':first').click();

  });

});

Это должно позаботиться об этом за вас. Я знаю, что это не самый чистый кодекс, но он тебя поймет.

0 голосов
/ 09 октября 2008

в моей реализации это работает так:

$(document).ready(function() {
    $('#edit_tabs').tabs(  {
        selected: [% page.selected_tab ? page.selected_tab : 0 %],
        select: function(e, ui) {
            // ui.tab is an 'a' object
            var url = ui.tab.href;

            document.location = url;
            return false;
        }
    }).show();
});
0 голосов
/ 09 октября 2008

спасибо, jobscry - «ui.tab», который вы указали, дал мне привязанный тег привязки, из которого я могу извлечь его класс, id, href и т.д. Мой последний вызов tabs () выглядит так:

$(document).ready(function() {
    $('#edit_tabs').tabs(  {
        selected: [% page.selected_tab ? page.selected_tab : 0 %],
        select: function(e, ui) {
            // ui.tab is an 'a' object
            // it has an id of "link_foo_bar"
            // transform it into http://....something&cmd=foo-bar
            var url = idToTabURL(ui.tab.id);

            document.location = url;
            return false;
        }
    }).show();
});
...