Bạn có thể tắt các tab trong Bootstrap không?


Câu trả lời:


188

Bạn có thể xóa data-toggle="tab"thuộc tính khỏi tab khi nó được nối bằng các sự kiện trực tiếp / ủy nhiệm


11
Cảm ơn đã làm việc một điều trị, cũng đã thêm css "con trỏ: không thả;" cho con trỏ để sử dụng biết tại sao họ không thể nhấp vào nó
arbme

23
con trỏ: không được phép; là thích hợp hơn trong trường hợp này. Trừ khi bạn thực sự kéo và thả.
Barshe Geers

9
Hoặc thêm một lớp bị vô hiệu hóa vào li
Pencilcheck

6
Bạn cần sử dụng cả hai gợi ý ở trên: Thêm lớp "bị vô hiệu hóa" vào <li> VÀ Xóa thuộc tính orogle dữ liệu khỏi tab
Scabbia

9
Tôi chỉ đơn giản là thêm vào CSS này và bây giờ class="disabled"các công trình như mong đợi.nav.nav-tabs > li.disabled { pointer-events: none; a { color: silver; } }
Effe

49

Kể từ 2.1, từ tài liệu bootstrap tại http://twitter.github.com/bootstrap/components.html#navs , bạn có thể.

Trạng thái vô hiệu hóa

Đối với bất kỳ thành phần điều hướng nào (tab, thuốc hoặc danh sách), hãy thêm .disables cho các liên kết màu xám và không có hiệu ứng di chuột. Liên kết sẽ vẫn có thể nhấp, tuy nhiên, trừ khi bạn xóa thuộc tính href. Ngoài ra, bạn có thể triển khai JavaScript tùy chỉnh để ngăn những nhấp chuột đó.

Xem https://github.com/twitter/bootstrap/issues/2764 để biết thêm tính năng thảo luận.


1
đây là một trong những chức năng chính và nó cho tôi thấy nó chưa được triển khai
DS_web_developer

Nó được thực hiện trong v3
Jeroen K

8
Có nhưng liên kết vẫn có thể nhấp.
Svlada

3
Chính xác, giải pháp khả thi cho đến nay là loại bỏ thuộc tính chuyển đổi dữ liệu.
Cyril N.

34

Tôi đã thêm Javascript sau đây để ngăn nhấp vào liên kết bị vô hiệu hóa:

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

9
Tôi nghĩ rằng sự kết hợp giữa câu trả lời này và câu trả lời của @ hotzu sẽ là câu trả lời. Bạn nên thêm disabledlớp vào thành liphần và sau đó thêm javascript mà bạn đã chỉ định ngoại trừ điều kiện bạn đang kiểm tra sẽ là : if ($(this).parent().hasClass('disabled')) {..}.
im1dermike

@ im1dermike Tôi không thấy lý do tại sao tôi sẽ làm điều này?
totas

Câu hỏi cũ, nhưng đó là những gì tôi tìm thấy vì vậy tôi đang thêm điều này. Bạn sẽ thực hiện kiểm tra đó bởi vì đó lilà những gì thay đổi hình ảnh cho người dùng và do đó là những gì nên có disabledlớp.
Jared

23

tôi nghĩ rằng giải pháp tốt nhất là vô hiệu hóa với css. Bạn xác định một lớp mới và bạn tắt các sự kiện chuột trên nó:

.disabledTab{
    pointer-events: none;
}

Và sau đó bạn gán lớp này cho phần tử li mong muốn:

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

Bạn cũng có thể thêm / xóa lớp bằng jQuery. Ví dụ: để tắt tất cả các tab:

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

Đây là một ví dụ: jsFiddle


thnx @hotzu u làm cho ngày của tôi trở nên dễ dàng .. :)
Gaurav Singh

Tôi rất muốn giới thiệu chống lại điều đó. vì một giải pháp chỉ css rời khỏi các tab có thể nhấp. trong trường hợp có những sự kiện khác lắng nghe những nhấp chuột đó, chúng sẽ được thực thi, đó không phải là kết quả mong muốn. (tôi đoán vậy?)
Mất trí nhớ

Trong trường hợp của tôi, điều này đã lừa Tôi đã xây dựng một hình thức bao gồm nhiều tab. Chuyển đến tab tiếp theo được thực hiện thông qua một nút, điều này sẽ kích hoạt một sự kiện nhấp chuột trên tab để đi đến. Vì vậy, vô hiệu hóa hoàn toàn các nhấp chuột không phải là một tùy chọn đối với tôi, nhưng loại bỏ các sự kiện con trỏ khỏi các tab là điều tôi cần.
sebastian

17

Không cần bất kỳ Jquery, chỉ cần một dòng CSS

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

1
Tôi đã phải làm điều này trên li.disables (không phải li.disables a)
Daniel

10

Ngoài ra, tôi đang sử dụng giải pháp sau:

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

Bây giờ bạn chỉ cần thêm lớp 'bị vô hiệu hóa' vào li cha và tab không hoạt động và trở thành màu xám.


6

Câu hỏi cũ nhưng nó chỉ cho tôi đi đúng hướng. Phương pháp tôi đã thực hiện là thêm lớp bị vô hiệu hóa vào li và sau đó thêm đoạn mã sau vào tệp Javascript của tôi.

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

Điều này sẽ vô hiệu hóa bất kỳ liên kết nào trong đó li có một lớp bị vô hiệu hóa. Tương tự như câu trả lời của totas nhưng nó sẽ không chạy nếu mỗi khi người dùng nhấp vào bất kỳ liên kết tab nào và nó không sử dụng trả về false.

Hy vọng nó sẽ hữu ích cho ai đó!


1
tốt nhưng cần e.preventDefault () trước e.stopImmediatePropagation ()
meuwka

6

Đối với việc sử dụng của tôi, giải pháp tốt nhất là kết hợp một số câu trả lời ở đây, đó là:

  • Thêm disabledlớp vào li tôi muốn tắt
  • Thêm đoạn mã này:

       `$(".nav .disabled>a").on("click", function(e) {
            e.preventDefault();
            return false;
        });`
  • Bạn thậm chí có thể xóa thuộc tính data-toggle = "tab" nếu bạn muốn Bootstrap hoàn toàn không can thiệp vào mã của bạn.

**** LƯU Ý **: ** Mã JS ở đây rất quan trọng, ngay cả khi bạn xóa chuyển đổi dữ liệu vì nếu không, nó sẽ cập nhật URL của bạn bằng cách thêm #your-idgiá trị vào đó, không được khuyến nghị vì tab của bạn bị vô hiệu hóa, do đó không nên được truy cập.


4

Chỉ với css , bạn có thể định nghĩa hai lớp 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>

Đây là một mẫu html. Điều duy nhất cần thiết là đặt lớp thành mục danh sách ưa thích của bạn.

<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

Giả sử, đây là TAB của bạn và bạn muốn tắt nó

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

Vì vậy, bạn cũng có thể vô hiệu hóa tab này bằng cách thêm css động

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

1

Ngoài câu trả lời của James:

Nếu bạn cần phải vô hiệu hóa liên kết sử dụng

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

Nếu bạn cần ngăn liên kết bị vô hiệu hóa tải tab

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

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

                e.preventDefault();

                e.stopPropagation();

                e.stopImmediatePropagation();

                return false;

            }
}

Nếu bạn cần không thể liên kết

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

0

Tôi đã thử tất cả các câu trả lời được đề xuất, nhưng cuối cùng tôi đã làm cho nó hoạt động như thế này

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

Không có câu trả lời nào phù hợp với tôi. Xóa data-toggle="tab"khỏi atab ngăn không cho kích hoạt, nhưng nó cũng thêm #tabIdbăm vào URL. Điều đó là không thể chấp nhận được với tôi. Điều cũng không thể chấp nhận được là sử dụng javascript.

Những gì không hoạt động được thêm disabledlớp vào livà loại bỏ hrefthuộc tính chứa nó a.


Bây giờ tôi đã đọc thêm, đây về cơ bản cũng là câu trả lời chính xác như câu trả lời từ @Scott Stafford, người đã trả lời nó 2 năm trước ...
Jim

0

các tab của tôi nằm trong các bảng, vì vậy tôi đã thêm một lớp = 'bị vô hiệu hóa' vào neo tab

trong javascript tôi đã thêm:

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

và để trình bày trong ít hơn tôi đã thêm:

.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

Giải pháp dễ dàng và sạch sẽ nhất để tránh điều này là thêm onclick="return false;"vào athẻ.

<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>
  • Việc thêm "cursor:no-drop;"chỉ khiến con trỏ trông bị vô hiệu hóa, nhưng có thể nhấp được , Url được nối thêm với href đích cho expage.apsx#Home
  • Không cần thêm "disabled"lớp vào <li>VÀ loại bỏhref

0

Bạn có thể vô hiệu hóa một tab trong bootstrap 4 bằng cách thêm lớp disabledvào phần con của mục điều hướng như sau

<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

Đây là nỗ lực của tôi. Để tắt một tab:

  1. Thêm lớp "bị vô hiệu hóa" vào LI của tab;
  2. Xóa thuộc tính 'chuyển đổi dữ liệu' khỏi LI> A;
  3. Bỏ qua sự kiện 'click' trên LI> A.

Mã số:

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);
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.