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.
2014-09-18 00:21:31 +02:00
< div class = "bs-callout bs-callout-danger" >
< h4 > Cross-browser compatibility< / h4 >
2014-10-27 06:31:59 +01:00
< p >< a href = "https://github.com/twbs/bootstrap/issues/793" > Firefox persists form control states (disabledness and checkedness) across page loads</ a > . A workaround for this is to use < code > autocomplete="off"</ code > . See < a href = "https://bugzilla.mozilla.org/show_bug.cgi?id=654072" > Mozilla bug #654072 </ a > .</ p >
2014-09-18 00:21:31 +02:00
< / div >
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.
2014-09-18 00:21:31 +02:00
< div class = "bs-callout bs-callout-info" >
< h4 > Use whichever state you like!< / h4 >
< p > For the sake of this demonstration, we are using < code > data-loading-text< / code > and < code > $().button('loading')< / code > , but that's not the only state you can use. < a href = "#buttons-methods" > See more on this below in the < code > $().button(string)< / code > documentation< / a > .< / p >
< / div >
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 %}
2014-10-27 06:31:59 +01:00
< div class = "bs-callout bs-callout-warning" >
< h4 > Pre-toggled buttons need < code > .active< / code > and < code > aria-pressed="true"< / code > < / h4 >
< p > For pre-toggled buttons, you must add the < code > .active< / code > class and the < code > aria-pressed="true"< / code > attribute to the < code > button< / code > yourself.< / p >
< / div >
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
< div class = "bs-callout bs-callout-warning" >
2014-09-18 00:21:31 +02:00
< h4 > Preselected options need < code > .active< / code > < / h4 >
< p > For preselected options, you must add the < code > .active< / code > class to the input's < code > label< / code > yourself.< / p >
2014-07-13 09:54:10 +02:00
< / div >
2014-08-03 03:30:59 +02:00
< div class = "bs-callout bs-callout-warning" >
< h4 > Visual checked state only updated on click< / h4 >
< p > If the checked state of a checkbox button is updated without firing a < code > click< / code > event on the button (e.g. via < code > < input type="reset"> < / code > or via setting the < code > checked< / code > property of the input), you will need to toggle the < code > .active< / code > class on the input's < code > label< / code > yourself.< / p >
< / div >
2014-07-13 09:54:10 +02:00
{% example html %}
2014-09-18 00:21:31 +02:00
< div class = "bs-example" >
< 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 %}