Bisakah Anda menonaktifkan tab di Bootstrap?


Jawaban:


188

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


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.


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

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


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

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.


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!


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.


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>

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

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

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

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.


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

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

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>

-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);
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.