Buttons button.js
Do more with buttons. Control button states or create groups of buttons for more components like toolbars.
Cross-browser compatibility
Firefox persists form control states (disabledness and checkedness) across page loads. A workaround for this is to use autocomplete="off"
. See Mozilla bug #654072.
Stateful
Add data-loading-text="Loading..."
to use a loading state on a button.
This feature is deprecated since v3.3.5 and has been removed in v4.
Use whichever state you like!
For the sake of this demonstration, we are using data-loading-text
and $().button('loading')
, but that's not the only state you can use. See more on this below in the $().button(string)
documentation.
<button class="btn btn-primary" id="myButton" data-loading-text="Loading..." type="button" autocomplete="off">
Loading state
</button>
<script>
$('#myButton').on('click', function () {
var $btn = $(this).button('loading')
// business logic...
$btn.button('reset')
})
</script>
Single toggle
Add data-toggle="button"
to activate toggling on a single button.
Pre-toggled buttons need .active
and aria-pressed="true"
For pre-toggled buttons, you must add the .active
class and the aria-pressed="true"
attribute to the button
yourself.
<button class="btn btn-primary" data-toggle="button" type="button" aria-pressed="false" autocomplete="off">
Single toggle
</button>
Checkbox / Radio
Add data-toggle="buttons"
to a .btn-group
containing checkbox or radio inputs to enable toggling in their respective styles.
Preselected options need .active
For preselected options, you must add the .active
class to the input's label
yourself.
Visual checked state only updated on click
If the checked state of a checkbox button is updated without firing a click
event on the button (e.g. via <input type="reset">
or via setting the checked
property of the input), you will need to toggle the .active
class on the input's label
yourself.
<div class="btn-group" data-toggle="buttons">
<label class="btn btn-primary active">
<input type="checkbox" autocomplete="off" checked> Checkbox 1 (pre-checked)
</label>
<label class="btn btn-primary">
<input type="checkbox" autocomplete="off"> Checkbox 2
</label>
<label class="btn btn-primary">
<input type="checkbox" autocomplete="off"> Checkbox 3
</label>
</div>
<div class="btn-group" data-toggle="buttons">
<label class="btn btn-primary active">
<input id="option1" name="options" type="radio" autocomplete="off" checked> Radio 1 (preselected)
</label>
<label class="btn btn-primary">
<input id="option2" name="options" type="radio" autocomplete="off"> Radio 2
</label>
<label class="btn btn-primary">
<input id="option3" name="options" type="radio" autocomplete="off"> Radio 3
</label>
</div>
Methods
$().button('toggle')
Toggles push state. Gives the button the appearance that it has been activated.
$().button('reset')
Resets button state - swaps text to original text. This method is asynchronous and returns before the resetting has actually completed.
$().button(string)
Swaps text to any data defined text state.
<button class="btn btn-primary" id="myStateButton" data-complete-text="finished!" type="button" autocomplete="off">
...
</button>
<script>
$('#myStateButton').on('click', function () {
$(this).button('complete') // button text will be "finished!"
})
</script>