Two-state button with HTML, CSS and jQuery
To express 0-1 state checkboxes are mostly used in websites. A two-state button used instead can be a bit more nicer and interesting. You can create it in HTML, CSS and Javascript/jQuery quite easy.
Here, is how to do this.
We need:
- a checkbox and a label folowing it,
- some styling in CSS,
- a piece of code in Javascript/jQuery.
You can put checkbox (<input type="checkbox"/>
) and label directly in HTML:
<input id="chk" type="checkbox" /> <label id="lbl" for="chk" title="Auto">A</label>
or generate it dynamically with jQuery:
var where = $('#main').find("form"); $("<input />", { type: "checkbox", id: 'chk', checked: false }).appendTo(where); $("<label></label>", { "for": 'chk', text: 'A', id: 'lbl', title: 'Auto!' }).appendTo(where);
Where where holds some div or any other elements, containing some form, to which you want to add this two-state button.
Now, we need some styling to hide checkbox (yes!) and style label like a button:
#lbl {background-color: #dddddd; display: inline-block; height: 20px; text-align: center; width: 20px; border-top: solid 1px white; border-left: solid 1px white; border-right: solid 1px #bbbbbb; border-bottom: solid 1px #bbbbbb} #chk {display: none;} #chk:checked + #lbl {border-top: solid 1px #bbbbbb; border-left: solid 1px #bbbbbb; border-right: solid 1px white; border-bottom: solid 1px white}
Here is the key. We use borders in different colors (top + left versus bottom + right) to mimic button look.
All we need else is a piece of jQuery code to react on button (label) click:
var onCheckboxChangeHandler: function(e) { var checked = !$('#chk').is(":checked"); console.log(checked); }
We need to negate value read from checkbox for reasons described in this post.
We also need to bind this function as an event, somewhere in the code:
$('#lbl').on("click", self.onCheckboxChangeHandler);
Now, everything should work fine.