Bisakah Anda menonaktifkan tab di Bootstrap?

Jawaban:

188

Anda dapat menghapus data-toggle="tab"atribut dari tab karena terhubung menggunakan acara langsung / delegasi

Betty
sumber
11
Terima kasih telah bekerja, juga menambahkan css "cursor: no-drop;" untuk kursor, jadi gunakan tahu mengapa mereka tidak bisa mengkliknya
arbme
23
kursor: tidak diizinkan; lebih tepat dalam hal ini. Kecuali Anda benar-benar drag-and-dropping.
Christophe Geers
9
Atau tambahkan kelas yang dinonaktifkan ke li
Pencilcheck
6
Anda perlu menggunakan kedua saran di atas: Tambahkan kelas "dinonaktifkan" ke <li> DAN Hapus atribut data-toogle atau href dari tab
Scabbia
9
Saya hanya menambahkan CSS ini dan sekarang class="disabled"berfungsi seperti yang diharapkan.nav.nav-tabs > li.disabled { pointer-events: none; a { color: silver; } }
effe
49

Mulai 2.1, dari dokumentasi bootstrap di http://twitter.github.com/bootstrap/components.html#navs , Anda bisa.

Status dinonaktifkan

Untuk komponen nav apa pun (tab, pil, atau daftar), tambahkan .disable untuk tautan abu-abu dan tidak ada efek hover. Tautan akan tetap dapat diklik, kecuali Anda menghapus atribut href. Atau, Anda dapat menerapkan JavaScript khusus untuk mencegah klik tersebut.

Lihat https://github.com/twitter/bootstrap/issues/2764 untuk fitur tambah diskusi.

Scott Stafford
sumber
1
ini adalah salah satu fungsi utama dan itu mengejutkan saya belum diimplementasikan
DS_web_developer
Ini diimplementasikan dalam v3
Jeroen K
8
Ya tetapi tautan masih dapat diklik.
svlada
3
Tepatnya, solusi yang layak sejauh ini adalah menghapus atribut data-toggle.
Cyril N.
34

Saya menambahkan Javascript berikut untuk mencegah klik pada tautan yang dinonaktifkan:

$(".nav-tabs a[data-toggle=tab]").on("click", function(e) {
  if ($(this).hasClass("disabled")) {
    e.preventDefault();
    return false;
  }
});
totas
sumber
9
Saya pikir kombinasi dari ini dan tanggapan hotzu harus menjadi jawabannya. Anda harus menambahkan disabledkelas untuk lielemen dan kemudian menambahkan javascript Anda tentukan kecuali kondisi Anda akan memeriksa terhadap akan: if ($(this).parent().hasClass('disabled')) {..}.
im1dermike
@ im1dermike Saya tidak mengerti mengapa saya melakukan ini?
totas
Pertanyaan lama, tapi itulah yang saya temukan jadi saya menambahkan ini. Anda akan melakukan pemeriksaan itu karena liitulah yang mengubah visual untuk pengguna dan akibatnya apa yang harus memiliki disabledkelas.
Jared
23

saya pikir solusi terbaik adalah menonaktifkan dengan css. Anda mendefinisikan kelas baru dan mematikan aktivitas mouse di dalamnya:

.disabledTab{
    pointer-events: none;
}

Dan kemudian Anda menetapkan kelas ini ke elemen li yang diinginkan:

<li class="disabled disabledTab"><a href="#"> .... </a></li>

Anda dapat menambah / menghapus kelas dengan jQuery juga. Misalnya, untuk menonaktifkan semua tab:

$("ul.nav li").removeClass('active').addClass('disabledTab');

Berikut ini sebuah contoh: jsFiddle

Zsolt Tolvaly
sumber
thnx @hotzu u membuat hari saya mudah .. :)
Gaurav Singh
Saya akan sangat merekomendasikan hal itu. karena solusi css saja membuat tab dapat diklik. jika ada acara lain yang mendengarkan klik tersebut, mereka akan dieksekusi, yang bukan hasil yang diinginkan. (kurasa?)
Demensik
Dalam kasus saya, ini berhasil. Saya membuat formulir yang terdiri dari banyak tab. Pergi ke tab berikutnya dilakukan melalui tombol, yang memicu acara klik pada tab untuk pergi ke. Jadi, menonaktifkan sepenuhnya klik bukanlah pilihan bagi saya, tetapi menghapus peristiwa pointer dari tab adalah apa yang saya butuhkan.
sebastian
17

Tidak Perlu Jquery, Hanya Satu Baris CSS

.nav-tabs li.disabled a {
    pointer-events: none;
}
Rubel Hossain
sumber
1
Saya harus melakukan ini di li.disabled (bukan li.disabled a)
Daniel
10

Saya juga menggunakan solusi berikut:

$('a[data-toggle="tab"]').on('click', function(){
  if ($(this).parent('li').hasClass('disabled')) {
    return false;
  };
});

Sekarang Anda hanya menambahkan kelas 'nonaktif' ke li induk dan tab tidak berfungsi dan menjadi abu-abu.

akopichin
sumber
6

Pertanyaan lama tapi itu menunjuk saya ke arah yang benar. Metode yang saya gunakan adalah menambahkan kelas yang dinonaktifkan ke li dan kemudian menambahkan kode berikut ke file Javascript saya.

$('.nav-tabs li.disabled > a[data-toggle=tab]').on('click', function(e) {
    e.stopImmediatePropagation();
});

Ini akan menonaktifkan tautan apa pun di mana li memiliki kelas yang dinonaktifkan. Agak mirip dengan jawaban totas tetapi itu tidak akan berjalan jika setiap kali pengguna mengklik tautan tab apa pun dan tidak menggunakan return false.

Semoga bermanfaat bagi seseorang!

James
sumber
1
baik! tetapi perlu e.preventDefault () sebelum e.stopImmediatePropagation ()
meuwka
6

Untuk saya gunakan, solusi terbaik adalah campuran dari beberapa jawaban di sini, yaitu:

  • Menambahkan disabledkelas ke li saya ingin menonaktifkan
  • Tambahkan sepotong JS ini:

       `$(".nav .disabled>a").on("click", function(e) {
            e.preventDefault();
            return false;
        });`
  • Anda bahkan dapat menghapus atribut data-toggle = "tab" jika Anda ingin Bootstrap sama sekali tidak mengganggu kode Anda.

**** CATATAN **: ** Kode JS di sini penting, bahkan jika Anda menghapus data-toggle karena jika tidak, itu akan memperbarui URL Anda dengan menambahkan #your-idnilai itu, yang tidak direkomendasikan karena tab Anda dinonaktifkan, dengan demikian tidak boleh diakses.

Cyril N.
sumber
4

Dengan hanya css , Anda dapat mendefinisikan dua kelas css.

<style type="text/css">
    /* Over the pointer-events:none, set the cursor to not-allowed.
    On this way you will have a more user friendly cursor. */
    .disabledTab {
        cursor: not-allowed;
    }
    /* Clicks are not permitted and change the opacity. */
    li.disabledTab > a[data-toggle="tab"] {
        pointer-events: none;
        filter: alpha(opacity=65);
        -webkit-box-shadow: none;
        box-shadow: none;
        opacity: .65;
    }
</style>

Ini adalah template html. Satu-satunya hal yang diperlukan adalah mengatur kelas ke item daftar pilihan Anda.

<ul class="nav nav-tabs tab-header">
    <li>
        <a href="#tab-info" data-toggle="tab">Info</a>
    </li>
    <li class="disabledTab">
        <a href="#tab-date" data-toggle="tab">Date</a>
    </li>
    <li>
        <a href="#tab-photo" data-toggle="tab">Photo</a>
    </li>
</ul>
<div class="tab-content">
    <div class="tab-pane active" id="tab-info">Info</div>
    <div class="tab-pane active" id="tab-date">Date</div>
    <div class="tab-pane active" id="tab-photo">Photo</div>
</div>
George Siggouroglou
sumber
2

Misalkan, ini adalah TAB Anda dan Anda ingin menonaktifkannya

<li class="" id="groups"><a data-toggle="tab" class="navuserli" href="#groups" aria-expanded="false">Groups</a></li>

Jadi, Anda juga dapat menonaktifkan tab ini dengan menambahkan css dinamis

$('#groups').css('pointer-events', 'none')
Vinaysingh Khetwal
sumber
1

Selain jawaban James:

Jika Anda perlu menonaktifkan penggunaan tautan

$('a[data-toggle="tab"]').addClass('disabled');

Jika Anda perlu mencegah tautan yang dinonaktifkan memuat tab

$('a[data-toggle="tab"]').click(function(e){

            if($this.hasClass("disabled")){

                e.preventDefault();

                e.stopPropagation();

                e.stopImmediatePropagation();

                return false;

            }
}

Jika Anda tidak dapat membuat tautan

$('a[data-toggle="tab"]').removeClass('disabled');
RafaSashi
sumber
0

Saya mencoba semua jawaban yang disarankan, tetapi akhirnya saya membuatnya bekerja seperti ini

if (false) //your condition
{
    $("a[data-toggle='tab'").prop('disabled', true);
    $("a[data-toggle='tab'").each(function () {
        $(this).prop('data-href', $(this).attr('href')); // hold you original href
        $(this).attr('href', '#'); // clear href
    });                
    $("a[data-toggle='tab'").addClass('disabled-link');
}
else
{
    $("a[data-toggle='tab'").prop('disabled', false);
    $("a[data-toggle='tab'").each(function () {
        $(this).attr('href', $(this).prop('data-href')); // restore original href
    });
    $("a[data-toggle='tab'").removeClass('disabled-link');
}
// if you want to show extra messages that the tab is disabled for a reason
$("a[data-toggle='tab'").click(function(){
   alert('Tab is disabled for a reason');
});
Abou-Emish
sumber
0

Tidak ada jawaban yang cocok untuk saya. Hapus data-toggle="tab"dari amencegah tab dari mengaktifkan, tetapi juga menambahkan #tabIdhash ke URL. Bagi saya itu tidak bisa diterima. Yang juga tidak bisa diterima adalah menggunakan javascript.

Apa yang berhasil ditambahkan disabledkelas ke lidan menghapus hrefatribut yang mengandungnya a.

im1dermike
sumber
Sekarang setelah saya baca lebih lanjut, ini pada dasarnya juga merupakan jawaban yang persis sama dengan yang dari @Scott Stafford, yang menjawabnya 2 tahun sebelumnya ...
Jim
0

tab saya ada di panel, jadi saya menambahkan kelas = 'dinonaktifkan' ke jangkar tab

dalam javascript saya menambahkan:

$(selector + ' a[data-toggle="tab"]').on('show.bs.tab', function (e) {
    if ($(this).hasClass('disabled')){
        e.preventDefault();
        return false;
    }
})

dan untuk presentasi kurang saya tambahkan:

.panel-heading{
    display:table;
    width:100%;
    padding-bottom:10px;
    ul.nav-tabs{
        display:table-cell;
        vertical-align:bottom;
        a.disabled{
            .text-muted;
            cursor:default;
            &:hover{
                background-color:transparent;
                border:none;
            }
        }
    }
}
pgee70
sumber
0

Kebanyakan solusi mudah dan bersih untuk menghindari hal ini adalah menambahkan onclick="return false;"untuk atag.

<ul class="nav nav-tabs">
    <li class="active">
        <a href="#home" onclick="return false;">Home</a>
    </li>    
    <li>
        <a href="#ApprovalDetails" onclick="return false;">Approval Details</a>
    </li>
</ul>
  • Menambahkan "cursor:no-drop;"hanya membuat kursor terlihat dinonaktifkan, tetapi dapat diklik , Url akan ditambahkan dengan target href untuk expage.apsx#Home
  • Tidak perlu menambahkan "disabled"kelas ke <li>DAN menghapushref
Gaurrav
sumber
0

Anda dapat menonaktifkan tab di bootstrap 4 dengan menambahkan kelas disabledke anak dari nav-item sebagai berikut

<li class="nav-item">
    <a class="nav-link disabled" data-toggle="tab" href="#messages7" role="tab" aria-expanded="false">
        <i class="icofont icofont-ui-message"></i>Home</a>
    <div class="slide"></div>
</li>
NIKHIL NEDIYODATH
sumber
-1

Inilah usaha saya. Untuk menonaktifkan tab:

  1. Tambahkan kelas "nonaktif" ke tab LI;
  2. Hapus atribut 'data-toggle' dari LI> A;
  3. Menekan acara 'klik' di LI> A.

Kode:

var toggleTabs = function(state) {
    disabledTabs = ['#tab2', '#tab3'];
    $.each(disabledTabs, $.proxy(function(idx, tabSelector) {
        tab = $(tabSelector);
        if (tab.length) {
            if (state) {
                // Enable tab click.
                $(tab).toggleClass('disabled', false);
                $('a', tab).attr('data-toggle', 'tab').off('click');
            } else {
                // Disable tab click.
                $(tab).toggleClass('disabled', true);
                $('a', tab).removeAttr('data-toggle').on('click', function(e){
                    e.preventDefault();
                });
            }
        }
    }, this));
};

toggleTabs.call(myTabContainer, true);
temuri
sumber