Переключить класс "Щебетать" при активации
В twitter bootstrap я искал способ, чтобы кнопка была цветом по умолчанию, когда она не активна. Когда кнопка активна, я хочу изменить ее цвет. Я посмотрел, как это сделать с предоставленным js файлом. В конце концов я написал немного script, чтобы справиться с этим.
Ответы
Ответ 1
Добавив class-toggle
в качестве атрибута кнопки, равную тому, что вы хотели бы открыть, после нажатия кнопки и добавления следующего jQuery, вы получите результат, описанный выше.
$('.btn-group > .btn, .btn[data-toggle="button"]').click(function() {
if($(this).attr('class-toggle') != undefined && !$(this).hasClass('disabled')){
var btnGroup = $(this).parent('.btn-group');
if(btnGroup.attr('data-toggle') == 'buttons-radio') {
btnGroup.find('.btn').each(function() {
$(this).removeClass($(this).attr('class-toggle'));
});
$(this).addClass($(this).attr('class-toggle'));
}
if(btnGroup.attr('data-toggle') == 'buttons-checkbox' || $(this).attr('data-toggle') == 'button') {
if($(this).hasClass('active')) {
$(this).removeClass($(this).attr('class-toggle'));
} else {
$(this).addClass($(this).attr('class-toggle'));
}
}
}
});
Затем кнопка будет выглядеть как
<button class="btn" data-toggle="button" class-toggle="btn-inverse">Single Toggle</button>
Если вы хотите сделать это с помощью группы кнопок, то она работает одинаково. Просто добавьте class-toggle
к каждой кнопке в группе.
jsfiddle
UPDATE
Я изменил и создал суть, чтобы лучше реагировать, когда вы запускаете кнопку с классом. Переключить классы Bootstrap Twitter
UPDATE
Я внес изменения, чтобы исправить ошибку, которая появляется при нажатии активного переключателя
Найти здесь
Ответ 2
Я не думаю, что любой JS действительно необходим.
Я считаю, что это можно сделать исключительно с помощью CSS и data
атрибутов.
Да, это связано с небольшим дублированием CSS, но все же лучше, чем иногда глючный javascript.
- Добавить атрибут данных
data-active-class
к кнопке,
-
Добавить пользовательский CSS для всех классов (пример одного для удобства чтения, цвета взяты из уже существующих классов "primary", "success" и т.д.)
.btn.active[data-active-class="primary"] {
color: #fff;
background-color: #286090;
border-color: #204d74;
}
Неактивная кнопка будет отображаться как обычно, активная на основе атрибута data-*
будет отображаться этим ^^ CSS.
JSFiddle с полным CSS
Edit:
При использовании SASS или LESS цвета могут/должны использоваться из переменных, уже определенных Bootstrap..., которые решают проблему дублирования.
Ответ 3
Я редактировал ваш код. Если вы нажмете на активное состояние в своем коде, все это испортится. Я добавил небольшое утверждение if, которое предотвращает это. Просто вклад, если вам понадобится исправить. Хорошая работа с кодом.
$('.btn-group > .btn, .btn[data-toggle="button"]').click(function() {
var buttonClasses = ['btn-primary','btn-danger','btn-warning','btn-success','btn-info','btn-inverse'];
var $this = $(this);
if ($(this).attr('class-toggle') != undefined && !$(this).hasClass('disabled')) {
var btnGroup = $this.parent('.btn-group');
var btnToggleClass = $this.attr('class-toggle');
var btnCurrentClass = $this.hasAnyClass(buttonClasses);
if(btnToggleClass!='false'&&btnToggleClass!='btn') {
if (btnGroup.attr('data-toggle') == 'buttons-radio') {
var activeButton = btnGroup.find('.btn.active');
var activeBtnClass = activeButton.hasAnyClass(buttonClasses);
activeButton.removeClass(activeBtnClass).addClass(activeButton.attr('class-toggle')).attr('class-toggle',activeBtnClass);
$this.removeClass(btnCurrentClass).addClass(btnToggleClass).attr('class-toggle',btnCurrentClass);
}
if (btnGroup.attr('data-toggle') == 'buttons-checkbox' || $this.attr('data-toggle') == 'button') {
$this.removeClass(btnCurrentClass).addClass(btnToggleClass).attr('class-toggle',btnCurrentClass);
}
}
}
});
$.fn.hasAnyClass = function(classesToCheck) {
for (var i = 0; i < classesToCheck.length; i++) {
if (this.hasClass(classesToCheck[i])) {
return classesToCheck[i];
}
}
return false;
Искренне любимчик Bootstrap