Ответы:
Вы можете удалить data-toggle="tab"
атрибут с вкладки, так как он подключен с помощью событий live / делегата
class="disabled"
работает как положено.nav.nav-tabs > li.disabled { pointer-events: none; a { color: silver; } }
Начиная с версии 2.1, из документации по начальной загрузке на http://twitter.github.com/bootstrap/components.html#navs вы можете это сделать.
Неработающее состояние
Для любого компонента навигации (вкладки, таблетки или список) добавьте .disabled для серых ссылок и без эффектов наведения. Однако ссылки останутся кликабельными, если вы не удалите атрибут href. В качестве альтернативы, вы можете реализовать собственный JavaScript, чтобы предотвратить эти клики.
См. Https://github.com/twitter/bootstrap/issues/2764 для обсуждения функции добавления.
Я добавил следующий Javascript для предотвращения кликов по отключенным ссылкам:
$(".nav-tabs a[data-toggle=tab]").on("click", function(e) {
if ($(this).hasClass("disabled")) {
e.preventDefault();
return false;
}
});
disabled
класс к li
элементу , а затем добавить JavaScript, указанные кроме условия вы бы проверки против будет: if ($(this).parent().hasClass('disabled')) {..}
.
li
это то, что изменяет визуальные элементы для пользователя, и, следовательно, то, что должно иметь disabled
класс.
Я думаю, что лучшее решение - отключить с помощью CSS. Вы определяете новый класс и отключаете события мыши на нем:
.disabledTab{
pointer-events: none;
}
И затем вы назначаете этот класс желаемому элементу li:
<li class="disabled disabledTab"><a href="#"> .... </a></li>
Вы также можете добавить / удалить класс с помощью jQuery. Например, чтобы отключить все вкладки:
$("ul.nav li").removeClass('active').addClass('disabledTab');
Вот пример: jsFiddle
.nav-tabs li.disabled a {
pointer-events: none;
}
Старый вопрос, но он как бы указал мне правильное направление. Метод, который я использовал, заключался в том, чтобы добавить отключенный класс в li, а затем добавить следующий код в мой файл Javascript.
$('.nav-tabs li.disabled > a[data-toggle=tab]').on('click', function(e) {
e.stopImmediatePropagation();
});
Это отключит любую ссылку, где у класса li есть класс отключен. Это похоже на тотальный ответ, но он не запускается, если каждый раз, когда пользователь нажимает на любую вкладку и не использует return false.
Надеюсь, это кому-нибудь пригодится!
Для моего использования лучшим решением было сочетание некоторых ответов здесь, а именно:
disabled
класса в li я хочу отключитьДобавьте этот кусок JS:
`$(".nav .disabled>a").on("click", function(e) {
e.preventDefault();
return false;
});`
Вы даже можете удалить атрибут data-toggle = "tab", если хотите, чтобы Bootstrap вообще не мешал вашему коду.
**** ПРИМЕЧАНИЕ **: ** Код JS здесь важен, даже если вы удалите переключатель данных, потому что в противном случае он обновит ваш URL, добавив #your-id
к нему значение, что не рекомендуется, поскольку ваша вкладка отключена, таким образом, не должно быть доступа.
Используя только CSS , вы можете определить два класса 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>
Это HTML-шаблон. Единственное, что нужно, это установить класс для вашего предпочтительного элемента списка.
<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>
Предположим, это ваш TAB, и вы хотите отключить его
<li class="" id="groups"><a data-toggle="tab" class="navuserli" href="#groups" aria-expanded="false">Groups</a></li>
Таким образом, вы также можете отключить эту вкладку, добавив динамический CSS
$('#groups').css('pointer-events', 'none')
В дополнение к ответу Джеймса:
Если вам нужно отключить ссылку, используйте
$('a[data-toggle="tab"]').addClass('disabled');
Если вам нужно запретить загрузке ссылки отключенную ссылку
$('a[data-toggle="tab"]').click(function(e){
if($this.hasClass("disabled")){
e.preventDefault();
e.stopPropagation();
e.stopImmediatePropagation();
return false;
}
}
Если вам не удалось ссылку
$('a[data-toggle="tab"]').removeClass('disabled');
Я перепробовал все предложенные ответы, но в конце концов я сделал так
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');
});
Ни один из ответов не работает для меня. Удалить data-toggle="tab"
из a
предотвращает активацию вкладки, но также добавляет #tabId
хэш к URL. Это неприемлемо для меня. Что также неприемлемо, это использование JavaScript.
Что работает, так это добавление disabled
класса в класс li
и удаление href
атрибута его содержания a
.
мои вкладки были в панелях, поэтому я добавил class = 'disabled' в привязку вкладок
в JavaScript я добавил:
$(selector + ' a[data-toggle="tab"]').on('show.bs.tab', function (e) {
if ($(this).hasClass('disabled')){
e.preventDefault();
return false;
}
})
и для представления меньше, я добавил:
.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;
}
}
}
}
Самое простое и чистое решение, чтобы избежать этого - добавление onclick="return false;"
в a
тег.
<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>
"cursor:no-drop;"
курсор выглядит неактивным, но он кликабелен , Url добавляется с целью href, например,page.apsx#Home
"disabled"
класс для <li>
удаленияhref
Вы можете отключить вкладку в начальной загрузке 4, добавив класс disabled
к потомку элемента nav следующим образом
<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>
Вот моя попытка. Чтобы отключить вкладку:
Код:
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);