Tab UI jQuery - Cara Mendapatkan Indeks Tab yang Saat Ini Dipilih


112

Saya tahu pertanyaan khusus ini telah ditanyakan sebelumnya , tetapi saya tidak mendapatkan hasil apa pun menggunakan bind()acara di jQuery UI Tabsplugin.

Saya hanya memerlukan indextab yang baru dipilih untuk melakukan tindakan saat tab diklik. bind()memungkinkan saya untuk terhubung ke acara pemilihan, tetapi metode saya yang biasa untuk mendapatkan tab yang saat ini dipilih tidak berfungsi. Ini mengembalikan indeks tab yang dipilih sebelumnya, bukan yang baru:

var selectedTab = $("#TabList").tabs().data("selected.tabs");

Berikut adalah kode yang saya coba gunakan untuk mendapatkan tab yang saat ini dipilih:

$("#TabList").bind("tabsselect", function(event, ui) {

});

Ketika saya menggunakan kode ini, objek ui kembaliundefined . Dari dokumentasi, ini seharusnya menjadi objek yang saya gunakan untuk menghubungkan ke indeks yang baru dipilih menggunakan ui.tab. Saya telah mencoba ini pada tabs()panggilan awal dan juga sendiri. Apakah saya melakukan sesuatu yang salah di sini?

Jawaban:


71

Untuk JQuery UI versi sebelum 1.9 : ui.indexdari eventinilah yang Anda inginkan.

Untuk JQuery UI 1.9 atau yang lebih baru : lihat jawabannya oleh Giorgio Luparia, di bawah.


Jawaban yang sangat bagus! Saya menyertakan ringkasan dari apa yang Anda lakukan di situs web hanya untuk mempermudah mendapatkan jawabannya.
torial

Salam, Q menyebutkan objek ui adalah null, oleh karena itu ui.index akan gagal saat ini. Saya pikir jawabannya mungkin tidak sesederhana itu.
redsquare

Ini adalah jawaban yang sempurna, dan terima kasih atas contoh yang luar biasa! Saya mencoba melakukan semuanya dalam 1 kesempatan, dan itu tidak berhasil. Setelah saya membaginya, semuanya berfungsi seperti yang diiklankan.
Mark Struzinski

4
Jawabannya adalah ada - properti digunakan ui.index untuk mendapatkan indeks saat ini dalam acara tabselect .....
redsquare

17
Jawaban harus diperbarui karena tidak berfungsi dengan JQuery UI 1.9.0. Anda harus mengubah ui.index dengan ui.newTab.index () sesuai dengan Panduan Peningkatan ( jqueryui.com/upgrade-guide/1.9/… )
Giorgio Luparia

201

Jika Anda perlu mendapatkan indeks tab dari luar konteks acara tab, gunakan ini:

function getSelectedTabIndex() { 
    return $("#TabList").tabs('option', 'selected');
}

Pembaruan: Dari versi 1.9 'dipilih' diubah menjadi 'aktif'

$("#TabList").tabs('option', 'active')

2
Tampaknya itulah yang saya butuhkan.
El Yobo

2
Sepertinya ini sebenarnya memberikan tab default, bukan tab yang sedang dipilih. Apa yang saya lewatkan? 42 suara tidak mungkin salah, bukan? jqueryui.com/demos/tabs/#option-selected
Patrick Szalapski

Ya, solusi ini membantu. Terima kasih @Contra
Ashwin

9
Opsi 'terpilih' telah diubah namanya menjadi 'aktif' di jQuery UI versi 1.9 (lihat jqueryui.com/changelog/1.9.0 )
jake

43

UPDATE [ Min 08/26/2012 ] Jawaban ini menjadi sangat populer sehingga saya memutuskan untuk menjadikannya blog / tutorial lengkap.
Silakan kunjungi Blog Saya Di Sini untuk melihat informasi terbaru dalam akses mudah untuk bekerja dengan tab di jQueryUI
Juga disertakan (di blog juga) adalah jsFiddle


¡¡¡Perbarui! Harap diperhatikan: Dalam versi terbaru jQueryUI (1.9+), ui-tabs-selectedtelah diganti dengan ui-tabs-active. !!!


Saya tahu utas ini sudah tua, tetapi sesuatu yang tidak saya lihat disebutkan adalah cara mendapatkan "tab yang dipilih" (Saat ini panel yang dijatuhkan) dari tempat lain selain "peristiwa tab". Saya memiliki cara yang sederhana ...

var curTab = $('.ui-tabs-panel:not(.ui-tabs-hide)');

Dan untuk mudahnya mendapatkan index tersebut, tentunya ada cara yang tertera di situs ...

var $tabs = $('#example').tabs();
var selected = $tabs.tabs('option', 'selected'); // => 0

Namun, Anda dapat menggunakan metode pertama saya untuk mendapatkan indeks dan apa pun yang Anda inginkan tentang panel itu dengan cukup mudah ...

var curTab = $('.ui-tabs-panel:not(.ui-tabs-hide)'),
    curTabIndex = curTab.index(),
    curTabID = curTab.prop("id"),
    curTabCls = curTab.attr("class");
        //  etc ....

PS. Jika Anda menggunakan variabel iframe lalu .find ('. Ui-tabs-panel: not (.ui-tabs-hide)'), Anda juga akan mudah melakukan ini untuk tab yang dipilih dalam bingkai. Ingat, jQuery sudah melakukan semua kerja keras, tidak perlu menciptakan kembali roda!

Hanya untuk memperluas (diperbarui)

Pertanyaan diajukan kepada saya, "Bagaimana jika ada lebih dari satu area tab pada tampilan?" Sekali lagi, pikirkan sederhana, gunakan pengaturan saya yang sama tetapi gunakan ID untuk mengidentifikasi tab mana yang ingin Anda dapatkan.

Misalnya, jika Anda memiliki:

$('#example-1').tabs();
$('#example-2').tabs();

Dan Anda ingin panel saat ini dari set tab kedua:

var curTabPanel = $('#example-2 .ui-tabs-panel:not(.ui-tabs-hide)');

Dan jika Anda menginginkan tab AKTUAL dan bukan panel (sangat mudah, itulah sebabnya saya tidak menyebutkannya sebelumnya tetapi saya kira saya akan melakukannya sekarang, hanya untuk menyeluruh)

// 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+

Sekali lagi, ingat, jQuery melakukan semua kerja keras, jangan berpikir terlalu keras.


Luar biasa, terima kasih! Jika mau, Anda juga bisa memberikan ini sebagai jawaban untuk stackoverflow.com/q/1864219/11992 .
nikow

Inilah yang saya butuhkan - Terima kasih!
Justin Ethier

5
Opsi 'terpilih' telah diubah namanya menjadi 'aktif' di jQuery UI versi 1.9 (lihat jqueryui.com/changelog/1.9.0).
jake

41

Jika Anda menggunakan JQuery UI versi 1.9.0 atau lebih tinggi, Anda dapat mengakses ui.newTab.index () di dalam fungsi Anda dan mendapatkan apa yang Anda butuhkan.

Untuk versi sebelumnya, gunakan ui.index .


6
Akan sangat bagus jika Anda dapat menyempurnakan jawaban Anda dengan beberapa detail tambahan.
Kereta luncur

12
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');

11

Kapan Anda mencoba mengakses objek ui? UI tidak akan ditentukan jika Anda mencoba mengaksesnya di luar acara bind. Juga, jika garis ini

var selectedTab = $("#TabList").tabs().data("selected.tabs");

dijalankan di acara seperti ini:

$("#TabList").bind("tabsselect", function(event, ui) {
  var selectedTab = $("#TabList").tabs().data("selected.tabs");
});

selectedTab akan sama dengan tab saat ini pada saat itu (tab "sebelumnya".) Ini karena peristiwa "tabselect" dipanggil sebelum tab yang diklik menjadi tab saat ini. Jika Anda masih ingin melakukannya dengan cara ini, menggunakan "tabsshow" akan menghasilkan selectedTab yang sama dengan tab yang diklik.

Namun, itu tampaknya terlalu rumit jika yang Anda inginkan hanyalah indeksnya. ui.index dari dalam acara atau $ ("# TabList"). tabs (). data ("selected.tabs") di luar acara harus semua yang Anda butuhkan.


@Ben: solusi Anda memberikan tab yang dipilih sebelumnya karena itu adalah indeks saat peristiwa tabselect dipicu.
Michael Mao

1
@ Michael: Apakah Anda membaca jawaban saya atau hanya mengambil kodenya? Dalam jawaban saya, saya menyatakan bahwa kode tidak akan berfungsi sebagaimana mestinya dan memberikan beberapa alternatif (acara 'tabshow'; ui.index; $ ('TabList'). Tab (). Data ('selected.tabs'))
Ben Koehler

: Maaf atas tanggapan saya yang terlambat. Ya, ui.index berfungsi dengan baik. Saya hanya ingin menunjukkan fakta bahwa selected.tabs memberikan tab yang dipilih "sebelumnya", bukan tab penyembuh. Maksud saya jangan tersinggung dengan jawaban Anda.
Michael Mao

5

ini berubah dengan versi 1.9

sesuatu seperti

 $(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());
            }


        });

seharusnya digunakan. Ini berfungsi dengan baik untuk saya ;-)


4

Jika ada orang yang mencoba mengakses tab dari dalam iframe, Anda mungkin memperhatikan itu tidak mungkin. The divtab tidak pernah mendapat ditandai sebagai yang dipilih, seperti tersembunyi atau tidak tersembunyi. Tautan itu sendiri adalah satu-satunya bagian yang ditandai sebagai dipilih.

<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>

Berikut ini akan memberi Anda hrefnilai tautan yang harus sama dengan id untuk penampung tab Anda:

jQuery('.ui-tabs-selected a',window.parent.document).attr('href')

Ini juga harus bekerja di tempat: $tabs.tabs('option', 'selected');

Ini lebih baik dalam arti bahwa alih-alih hanya mendapatkan indeks tab, ini memberi Anda id tab yang sebenarnya.


4

cara termudah untuk melakukannya adalah

$("#tabs div[aria-hidden='false']");

dan untuk indeks

$("#tabs div[aria-hidden='false']").index();

4

Dalam kasus jika Anda menemukan Indeks tab Aktif dan kemudian arahkan ke Tab Aktif

Pertama, dapatkan indeks Aktif

var activeIndex = $("#panel").tabs('option', 'active');

Kemudian menggunakan kelas css, dapatkan panel konten tab

// this will return the html element
var element=   $("#panel").find( ".ui-tabs-panel" )[activeIndex]; 

sekarang dibungkus dalam objek jQuery untuk digunakan lebih lanjut

 var tabContent$ = $(element);

di sini saya ingin menambahkan dua info kelas .ui-tabs-navuntuk Navigasi yang terkait dengan dan .ui-tabs-panelterkait dengan panel konten tab. dalam demo tautan ini di situs web jquery ui Anda akan melihat kelas ini digunakan - http://jqueryui.com/tabs/#manipulation


3
$( "#tabs" ).tabs( "option", "active" )

maka Anda akan memiliki indeks tab dari 0

sederhana


2

Coba yang berikut ini:

var $tabs = $('#tabs-menu').tabs();

var selected = $tabs.tabs('option', 'selected');

var divAssocAtual = $('#tabs-menu ul li').tabs()[selected].hash;

2

Saya menemukan kode di bawah ini melakukan triknya. Menetapkan variabel indeks tab yang baru dipilih

$("#tabs").tabs({
    activate: function (e, ui) {
        currentTabIndex =ui.newTab.index().toString();
    }
});

2

Anda dapat memposting jawaban di bawah ini di posting Anda berikutnya

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

Jawaban ini berguna untuk menemukan tab yang aktif saat ini, terutama jika tidak dalam konteks acara pemilihan tab.
hrabinowitz

1

Cara lain untuk mendapatkan indeks tab yang dipilih adalah:

var index = jQuery('#tabs').data('tabs').options.selected;

1
$("#tabs").tabs({  
    load:  function(event, ui){  
        var anchor = ui.tab.find(".ui-tabs-anchor");  
        var url = anchor.attr('href');  
    }  
});  

Dalam variabel url Anda akan mendapatkan HREF / URL tab saat ini


1

Anda dapat menemukannya melalui:

$(yourEl).tabs({
    activate: function(event, ui) {
        console.log(ui.newPanel.index());
    }
});

0

ambil variabel tersembunyi seperti '<input type="hidden" id="sel_tab" name="sel_tab" value="" />'dan pada setiap acara klik tab, tulis kode seperti ...

<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>

Anda bisa mendapatkan nilai 'sel_tab' pada halaman yang diposting. :), sederhana !!!


2
Saya tidak menolak Anda, tetapi tidak ada alasan untuk markup tambahan dan JavaScript sebaris. Terutama karena dia sudah menggunakan jQuery ...
Justin Ethier

0

Jika Anda ingin memastikan ui.newTab.index()tersedia di semua situasi (tab lokal dan jarak jauh), panggil dalam fungsi pengaktifan seperti yang tertulis dalam dokumentasi :

$("#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());                   
        },
});

http://jsfiddle.net/7v7n0v3j/


0
$("#tabs").tabs({
    activate: function(event, ui) {
        new_index = ui.newTab.index()+1;
        //do anything
    }
});

1
Selamat datang di Stack Overflow! Meskipun tautan adalah cara yang bagus untuk berbagi pengetahuan, mereka tidak akan benar-benar menjawab pertanyaan jika rusak di masa mendatang. Tambahkan ke jawaban Anda konten penting dari tautan yang menjawab pertanyaan. Jika isinya terlalu kompleks atau terlalu besar untuk dimuat di sini, jelaskan gagasan umum dari solusi yang diusulkan. Ingatlah untuk selalu menyimpan referensi tautan ke situs web solusi asli. Lihat: Bagaimana cara menulis jawaban yang baik?
sɐunıɔ ןɐ qɐp
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.