Css Checkbox Without Input Tag Onclick , Pure Js
I want to make a functional CSS checkbox without using html tag, but struggling on doing it. Can someone check where I went wrong ?
Solution 1:
Here is a pure JS solution - some pointers:
getElementsByClassName
return anHTMLElement
listToggling a
class
name is easier than to edit the stylesThe
check
element must be given abackground
and notcolor
to get the checked feel.
See demo below:
var cbElements = document.getElementsByClassName("checkbox1");
for (var i = 0; i < cbElements.length; ++i) {
cbElements[i].addEventListener("click", function() {
this.getElementsByClassName("check")[0].classList.toggle('active');
});
}
.checkbox1 {
border: 1px solid black;
height: 10px;
width: 10px;
display: inline-block;
cursor:pointer;
}
.check {
visibility: hidden;
background: black;
display: block;
height: 100%;
}
.active {
visibility: visible;
}
<spanclass="checkbox1"><iclass="check"> </i></span><spanclass="checkbox1"><iclass="check"> </i></span>
Solution 2:
OOP-style with a Checkbox class. You can store references to a Checkbox instances to easily access their "checked" properties in your code. Also "checked" property can be defined with a getter-setter, to make it possible to render a checkbox on property change.
functionCheckbox(elem) {
this.elem = elem;
this.checked = elem.dataset.checked;
// Extend your component:// this.name = ...// this.value = ...// this.onchange = ...
elem.addEventListener('click', e => {
this.checked = !this.checked;
this.render();
});
}
Checkbox.prototype.render = function() {
this.elem.setAttribute('data-checked', this.checked);
}
functioninitCheckboxes(elems) {
for (let i = 0; i < elems.length; i++) {
newCheckbox(elems[i]);
}
}
initCheckboxes(document.querySelectorAll('.checkbox'));
.checkbox {
position: relative;
display: inline-block;
height: 15px;
width: 15px;
border: 1px solid;
cursor: pointer;
}
.checkbox:after {
position: absolute;
width: 100%;
line-height: 100%;
text-align: center;
}
.checkbox[data-checked="true"]:after {
content: "✓";
}
<spanclass="checkbox"></span><spanclass="checkbox"data-checked="true"></span>
Solution 3:
<head><scriptsrc="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script></head><style>.checkbox{
border: 1px solid black;
height: 10px;
width: 10px;
display: inline-block;
}
.checked{
background:red;
}
</style><spanclass="checkbox"id="chk_1"><iclass="checked"></i></span><spanclass="checkbox"id="chk_2"><iclass="check"></i></span><script>var cbElement = $(".checkbox");
$(cbElement).click(function(){
var currentCb = $(this).attr('id')
if($("#"+currentCb).hasClass("checked")){
$("#"+currentCb).removeClass("checked");
}else {
$("#"+currentCb).addClass("checked");
}
});
</script>
Post a Comment for "Css Checkbox Without Input Tag Onclick , Pure Js"