Twitterのブートストラップでは、アクティブでないときにボタンをデフォルトの色にする方法を探していました。ボタンがアクティブになったら、その色を変更したいと思いました。提供されたjsファイルでそれを行う方法を調べました。これを処理するために小さなスクリプトを書くことになりました。
3 に答える
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
グループ内の各ボタンに を追加するだけです。
アップデート
クラスでボタンを開始するときの応答を改善するために、要点を変更して作成しました。 Toggle Twitter ブートストラップ クラス
アップデート
アクティブなラジオボタンをクリックしたときに表示されるバグを修正するために変更を加えました
JSが本当に必要だとは思いません。これは、純粋に CSS とdata
属性によって実行できると思います。
はい、少しCSS の重複が伴いますが、時々不具合のある JavaScript よりはましです。
data-active-class
ボタンに data 属性を追加し、すべてのクラスにカスタム CSS を追加します (読みやすくするための例です。色は既存のクラス "primary"、"success" などから取得されます)。
.btn.active[data-active-class="primary"] { color: #fff; background-color: #286090; border-color: #204d74; }
非アクティブなボタンは通常どおりレンダリングされ、属性に基づくアクティブなdata-*
ボタンはこの ^^ CSS によってレンダリングされます。
編集: SASSまたはLESSを使用する場合、Bootstrapによってすでに定義されている変数から色を使用できる/使用する必要があります...これにより、重複の問題が解決されます。
私はあなたのコードを編集しました。コード内のアクティブな状態をクリックすると、すべてが台無しになります。これを防ぐ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 愛好家