admin管理员组文章数量:1356692
I want to make a functional CSS checkbox without using html <input>
tag, but struggling on doing it. Can someone check where I went wrong ?
var cbElement = document.getElementsByClassName("checkbox1");
cbElement.addEventListener("click", function() {
var checkbox = document.getElementsByClassName("check");
if (checkbox.style.visibility == "hidden") {
document.getElementByClassName("check").style.visibility = "visible";
} else if (checkbox.style.visibility == "visible") {
document.getElementsByClassName("check").style.visibility = "hidden";
}
});
.checkbox1 {
border: 1px solid black;
height: 10px;
width: 10px;
display: inline-block;
}
.check {
visibility: hidden;
color: black;
}
<span class="checkbox1">
<i class="check"></i>
</span>
<span class="checkbox1">
<i class="check"></i>
</span>
I want to make a functional CSS checkbox without using html <input>
tag, but struggling on doing it. Can someone check where I went wrong ?
var cbElement = document.getElementsByClassName("checkbox1");
cbElement.addEventListener("click", function() {
var checkbox = document.getElementsByClassName("check");
if (checkbox.style.visibility == "hidden") {
document.getElementByClassName("check").style.visibility = "visible";
} else if (checkbox.style.visibility == "visible") {
document.getElementsByClassName("check").style.visibility = "hidden";
}
});
.checkbox1 {
border: 1px solid black;
height: 10px;
width: 10px;
display: inline-block;
}
.check {
visibility: hidden;
color: black;
}
<span class="checkbox1">
<i class="check"></i>
</span>
<span class="checkbox1">
<i class="check"></i>
</span>
Share
Improve this question
edited Dec 2, 2016 at 11:01
Vadim Ovchinnikov
14.1k7 gold badges65 silver badges94 bronze badges
asked Dec 2, 2016 at 10:23
BongskieBongskie
533 silver badges10 bronze badges
3
- Why do you want to take input from the user without a form and a control (ie. input)? – Esko Commented Dec 2, 2016 at 10:33
- You can not add event listeners to HTML collections, you must target elements: stackoverflow./questions/27834226/… – sinisake Commented Dec 2, 2016 at 10:44
- @Esko , There is no real reason , i'm just learning and trying to do different things – Bongskie Commented Dec 2, 2016 at 10:59
3 Answers
Reset to default 5Here 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;
}
<span class="checkbox1">
<i class="check"> </i>
</span>
<span class="checkbox1">
<i class="check"> </i>
</span>
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.
function Checkbox(elem) {
this.elem = elem;
this.checked = elem.dataset.checked;
// Extend your ponent:
// 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);
}
function initCheckboxes(elems) {
for (let i = 0; i < elems.length; i++) {
new Checkbox(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: "✓";
}
<span class="checkbox"></span>
<span class="checkbox" data-checked="true"></span>
<head>
<script src="https://ajax.googleapis./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>
<span class="checkbox" id="chk_1">
<i class="checked"></i>
</span>
<span class="checkbox" id="chk_2">
<i class="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>
本文标签: javascriptCSS checkbox without input tag onclickpure JSStack Overflow
版权声明:本文标题:javascript - CSS checkbox without input tag onclick , pure JS - Stack Overflow 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.betaflare.com/web/1744022032a2577381.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论