Bootstrap'ta sekmeleri devre dışı bırakabilir misiniz?


Yanıtlar:


188

data-toggle="tab"Özniteliği, canlı / temsilci etkinlikleri kullanarak bağlandığından sekmeden kaldırabilirsiniz


11
Teşekkürler bir tedavi çalıştı, ayrıca css ekledi "imleç: no-drop;" imleç için bu yüzden kullanmak neden
tıklayamayacağını

23
imleç: izin verilmiyor; bu durumda daha uygundur. Sürükleyip bırakmadığınız sürece.
Christophe Geers

9
Veya
li'ye

6
Yukarıdaki her iki öneriyi de kullanmanız gerekir: <li> öğesine "devre dışı" sınıfı ekleyin VE sekmeden veri-toogle veya href niteliğini kaldırın
Scabbia

9
Ben sadece bu CSS ekledim ve şimdi class="disabled"beklendiği gibi çalışıyor.nav.nav-tabs > li.disabled { pointer-events: none; a { color: silver; } }
effe

49

2.1 itibariyle, http://twitter.github.com/bootstrap/components.html#navs adresindeki bootstrap belgelerinden yapabilirsiniz.

Devre dışı durumu

Herhangi bir gezinme bileşeni için (sekmeler, haplar veya liste), gri bağlantılar için .disabled'ı ekleyin ve fareyle üzerine gelme etkisi yok. Ancak, href özniteliğini kaldırmazsanız bağlantılar tıklanabilir olarak kalır. Alternatif olarak, bu tıklamaları önlemek için özel JavaScript uygulayabilirsiniz.

Özellik ekleme tartışması için https://github.com/twitter/bootstrap/issues/2764 adresine bakın .


1
Bu ana işlevlerden biridir ve henüz uygulanmadı beni
boggles

V3
Jeroen K

8
Evet, ancak bağlantılar yine de tıklanabilir.
svlada

3
Tam olarak, şimdiye kadar uygulanabilir çözüm, veri değiştirme özniteliğini kaldırmaktır.
Cyril

34

Devre dışı bırakılmış bağlantıların tıklanmasını önlemek için aşağıdaki Javascript'i ekledim:

$(".nav-tabs a[data-toggle=tab]").on("click", function(e) {
  if ($(this).hasClass("disabled")) {
    e.preventDefault();
    return false;
  }
});

9
Bence bu ve @ hotzu'nun yanıtı bir cevap olmalı. Sen eklemek gerekir disablediçin sınıf lielemanı ve o zaman olurdu karşı kontrol duyarım koşulu dışında belirtilen javascript ekleyin: if ($(this).parent().hasClass('disabled')) {..}.
im1dermike

@ im1dermike Bunu neden yapacağımı anlamıyorum?
totas

Eski soru, ama bulduğum şey bu yüzden bunu ekliyorum. Bunu kontrol edersiniz çünkü likullanıcı için görsellerin değişmesi ve sonuç olarak disabledsınıfa ne olması gerekir .
Jared

23

en iyi çözüm css ile devre dışı bırakmak olduğunu düşünüyorum. Yeni bir sınıf tanımlarsınız ve üzerinde fare olaylarını kapatırsınız:

.disabledTab{
    pointer-events: none;
}

Ve sonra bu sınıfı istediğiniz li öğesine atarsınız:

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

Sınıfı jQuery ile de ekleyebilir / kaldırabilirsiniz. Örneğin, tüm sekmeleri devre dışı bırakmak için:

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

İşte bir örnek: jsFiddle


thnx @hotzu u günümü kolaylaştırdı .. :)
Gaurav Singh

buna karşı şiddetle tavsiye ediyorum. çünkü sadece bir css çözümü sekmeleri tıklanabilir bırakır. bu tıklamaları dinleyen başka etkinlikler olması durumunda, bunlar istenen sonuç olmayan yürütülür. (Sanırım?)
Dementic

Benim durumumda, bu hile yaptı. Birden çok sekmeden oluşan bir form oluşturdum. Bir sonraki sekmeye gitmek, sekmedeki bir tıklama etkinliğini tetikleyen bir düğme aracılığıyla yapılır. Dolayısıyla, tıklamaları tamamen devre dışı bırakmak benim için bir seçenek değil, ancak işaretçi olaylarını sekmelerden kaldırmak tam olarak ihtiyacım olan şeydi.
sebastian

17

Herhangi Bir Jquery Gerek Yok, Sadece Bir Satır CSS

.nav-tabs li.disabled a {
    pointer-events: none;
}

1
Bunu li.disabled'da devre dışı bırakmak zorunda kaldım (li devre dışı değil)
Daniel

10

Ayrıca, aşağıdaki çözümü kullanıyorum:

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

Şimdi ana li'ye sadece 'engelli' sınıfını eklediğinizde sekme çalışmıyor ve gri oluyor.


6

Eski soru ama bu beni doğru yönde gösterdi. Gittiğim yöntem, devre dışı bırakılmış sınıfı li'ye eklemek ve ardından Javascript dosyama aşağıdaki kodu eklemekti.

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

Bu, li sınıfının devre dışı bırakıldığı herhangi bir bağlantıyı devre dışı bırakır. Totas'ın cevabına benzer bir tür, ancak bir kullanıcı herhangi bir sekme bağlantısını her tıkladığında ve return false kullanmazsa çalışmaz.

Umarım birisi için yararlı olur!


1
iyi! e.stopImmediatePropagation ()
meuwka'dan

6

Benim kullanımım için en iyi çözüm, buradaki bazı cevapların bir karışımıydı:

  • disabledSınıfı devre dışı bırakmak istediğim li'ye ekleme
  • Bu JS parçasını ekle:

       `$(".nav .disabled>a").on("click", function(e) {
            e.preventDefault();
            return false;
        });`
  • Bootstrap'in kodunuza hiç karışmamasını istiyorsanız data-toggle = "tab" özelliğini bile kaldırabilirsiniz.

**** NOT **: ** Buradaki JS kodu önemlidir, çünkü veri geçişini kaldırsanız bile, aksi takdirde #your-idsekmeniz devre dışı olduğu için önerilmez, URL'niz buna değer ekleyerek URL'nizi güncelleyecektir , bu nedenle erişilmemelidir.


4

Yalnızca css ile iki css sınıfı tanımlayabilirsiniz.

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

Bu bir html şablonu. Gereken tek şey, sınıfı tercih ettiğiniz liste öğesine ayarlamaktır.

<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

Diyelim ki bu SEKMİNİZ ve bunu devre dışı bırakmak istiyorsunuz

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

Böylece, dinamik css ekleyerek bu sekmeyi devre dışı bırakabilirsiniz

$('#groups').css('pointer-events', 'none')

1

James'in cevabına ek olarak:

Bağlantı kullanımını devre dışı bırakmanız gerekiyorsa

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

Devre dışı bırakılmış bir bağlantının sekmeyi yüklemesini önlemeniz gerekiyorsa

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

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

                e.preventDefault();

                e.stopPropagation();

                e.stopImmediatePropagation();

                return false;

            }
}

Bağlantıyı devre dışı bırakmanız gerekiyorsa

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

0

Önerilen tüm cevapları denedim, ama sonunda böyle çalışmasını sağladım

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

Cevapların hiçbiri benim için işe yaramıyor. Kaldır data-toggle="tab"dan aaktive gelen önler sekmesini, ama aynı zamanda ekler#tabId URL'ye karma. Bu benim için kabul edilemez. Ayrıca kabul edilemez olan javascript kullanmaktır.

Ne işe yarar disabledsınıf içerir ve içeren özniteliğini likaldırır .hrefa


Şimdi daha fazla okuduğum için, bu da temelde 2 yıl önce cevap veren @Scott Stafford'un cevabı ile aynı cevaptır ...
Jim

0

benim sekmeler paneller vardı, bu yüzden sekmeler çapa bir class = 'devre dışı' ekledi

javascript i ekledi:

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

ve daha az sunum için ekledi:

.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

En kolay ve temiz bir çözüm bu ekliyor önlemek için onclick="return false;"için aetiketi.

<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>
  • Eklemek "cursor:no-drop;"yalnızca imleci devre dışı bırakmış görünüyor, ancak tıklanabilir , URL eski için href hedefi ile ekleniyorpage.apsx#Home
  • AND kaldırmaya "disabled"sınıf eklemeye gerek yok<li>href

0

disabledNav öğesinin alt öğesine aşağıdaki gibi sınıf ekleyerek bootstrap 4'teki bir sekmeyi devre dışı bırakabilirsiniz

<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

İşte benim girişimim. Bir sekmeyi devre dışı bırakmak için:

  1. Sekmenin LI'sine "devre dışı" sınıfı ekleyin;
  2. 'Veri değiştirme' özelliğini LI> A'dan kaldırın;
  3. LI> A'da 'tıklama' etkinliğini bastırın.

Kod:

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);
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.