2014-07-12 11:20:15 +02:00
---
layout: page
title: Buttons
---
2014-09-18 00:21:31 +02:00
2014-07-13 09:54:10 +02:00
Do more with buttons. Control button states or create groups of buttons for more components like toolbars.
2015-04-17 01:56:40 +02:00
{% callout danger %}
#### Cross-browser compatibility
[Firefox persists form control states (disabledness and checkedness) across page loads ](https://github.com/twbs/bootstrap/issues/793 ). A workaround for this is to use `autocomplete="off"` . See [Mozilla bug #654072 ](https://bugzilla.mozilla.org/show_bug.cgi?id=654072 ).
{% endcallout %}
2014-07-13 09:54:10 +02:00
2014-09-18 00:21:31 +02:00
## Stateful
2014-07-13 09:54:10 +02:00
Add `data-loading-text="Loading..."` to use a loading state on a button.
2015-04-17 01:56:40 +02:00
{% callout info %}
#### 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 ](#buttons-methods ).
{% endcallout %}
2014-09-18 00:21:31 +02:00
2014-07-13 09:54:10 +02:00
{% example html %}
2014-09-18 00:21:31 +02:00
< button type = "button" id = "myButton" data-loading-text = "Loading..." class = "btn btn-primary" autocomplete = "off" >
2014-03-17 03:03:53 +01:00
Loading state
< / button >
< script >
2014-09-18 00:21:31 +02:00
$('#myButton').on('click', function () {
var $btn = $(this).button('loading')
// business logic...
$btn.button('reset')
})
2014-03-17 03:03:53 +01:00
< / script >
2014-07-13 09:54:10 +02:00
{% endexample %}
2014-03-17 03:03:53 +01:00
2014-09-18 00:21:31 +02:00
### Single toggle
2014-03-17 03:03:53 +01:00
2014-07-13 09:54:10 +02:00
Add `data-toggle="button"` to activate toggling on a single button.
{% example html %}
2014-10-27 06:31:59 +01:00
< button type = "button" class = "btn btn-primary" data-toggle = "button" aria-pressed = "false" autocomplete = "off" >
2014-07-13 09:54:10 +02:00
Single toggle
< / button >
{% endexample %}
2015-04-17 01:56:40 +02:00
{% callout warning %}
#### 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.
{% endcallout %}
2014-10-27 06:31:59 +01:00
2014-09-18 00:21:31 +02:00
## Checkbox and radio
2014-07-13 09:54:10 +02:00
2014-09-18 00:21:31 +02:00
Add `data-toggle="buttons"` to a `.btn-group` containing checkbox or radio inputs to enable toggling in their respective styles.
2014-07-13 09:54:10 +02:00
2015-04-17 01:56:40 +02:00
{% callout warning %}
#### Preselected options need `.active`
For preselected options, you must add the `.active` class to the input's `label` yourself.
{% endcallout %}
{% callout warning %}
#### 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.
{% endcallout %}
2014-08-03 03:30:59 +02:00
2014-07-13 09:54:10 +02:00
{% example html %}
2015-04-16 23:07:20 +02:00
< div class = "bd-example" >
2014-09-18 00:21:31 +02:00
< div class = "btn-group" data-toggle = "buttons" >
< label class = "btn btn-primary active" >
< input type = "checkbox" checked autocomplete = "off" > 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 >
2014-03-17 03:03:53 +01:00
< / div >
2014-07-13 09:54:10 +02:00
{% endexample %}
2014-09-18 00:21:31 +02:00
{% example html %}
2014-03-17 03:03:53 +01:00
< div class = "btn-group" data-toggle = "buttons" >
2014-04-03 04:55:05 +02:00
< label class = "btn btn-primary active" >
2014-09-18 00:21:31 +02:00
< input type = "radio" name = "options" id = "option1" autocomplete = "off" checked > Radio 1 (preselected)
2014-03-17 03:03:53 +01:00
< / label >
< label class = "btn btn-primary" >
2014-09-18 00:21:31 +02:00
< input type = "radio" name = "options" id = "option2" autocomplete = "off" > Radio 2
2014-03-17 03:03:53 +01:00
< / label >
< label class = "btn btn-primary" >
2014-09-18 00:21:31 +02:00
< input type = "radio" name = "options" id = "option3" autocomplete = "off" > Radio 3
2014-03-17 03:03:53 +01:00
< / label >
< / div >
2014-09-18 00:21:31 +02:00
{% endexample %}
2014-07-13 09:54:10 +02:00
### Methods
2014-03-17 03:03:53 +01:00
2014-07-13 09:54:10 +02:00
#### $().button('toggle')
2014-03-17 03:03:53 +01:00
2014-07-13 09:54:10 +02:00
Toggles push state. Gives the button the appearance that it has been activated.
#### $().button('reset')
2014-09-18 00:21:31 +02:00
Resets button state—swaps text to original text.
2014-07-13 09:54:10 +02:00
#### $().button(string)
2014-09-18 00:21:31 +02:00
Swaps text to any data defined text state.
2014-03-17 03:03:53 +01:00
{% highlight html %}
2014-09-18 00:21:31 +02:00
< button type = "button" id = "myStateButton" data-complete-text = "finished!" class = "btn btn-primary" autocomplete = "off" >
...
< / button >
2014-03-17 03:03:53 +01:00
< script >
2014-09-18 00:21:31 +02:00
$('#myStateButton').on('click', function () {
$(this).button('complete') // button text will be "finished!"
})
2014-03-17 03:03:53 +01:00
< / script >
{% endhighlight %}