如何添加当前复选的div的边框复选框。作为基础,我使用了实际经历了非常类似功能的在线课程的代码。不幸的是,在更改之后,它无法正常工作。
HTML
<div id="checkbox">
<label>
<input id="highlightall" type="checkbox"> Check all
</label>
</div>
<div class="checkboxall">
<div class="box">
<label>
<input class="highlight" type="checkbox"> Checkbox1
</label>
</div>
<div class="box">
<label>
<input class="highlight" type="checkbox"> Checkbox2
</label>
</div>
<div class="box">
<label>
<input class="highlight" type="checkbox"> Checkbox3
</label>
</div>
</div>
和Javascript文件
function preparePage() {
document.getElementsByClassName("highlight").onclick = function() {
if (document.getElementsByClassName("highlight").checked) {
// use CSS style to show it
document.getElementsByClassName("box").style.border = "thick solid #0000FF";
} else {
// hide the div
document.getElementsByClassName("box").style.border = "none";
}
};
// now hide it on the initial page load.
document.getElementsByClassName("box").style.border = "none";
}
window.onload = function() {
preparePage();
};
此外,这里是jsfiddle链接:https://jsfiddle.net/ohth2n7e/1/
感谢您的时间!
答案 0 :(得分:2)
全部工作。选择所有。然后单击
document.getElementById('highlightall').onclick = function(){
var border = document.getElementsByClassName("highlight");
for(i=0;i < border.length; i++)
{
border[i].checked = (this.checked)? true : false;
}
}
var border = document.getElementsByClassName("highlight");
for(i=0;i < border.length; i++)
{
border[i].addEventListener("click", function() {
if (this.checked) {
this.parentElement.style.border = "thick solid #0000FF";
} else {
this.parentElement.style.border = "none";
}
});
}
&#13;
.checkboxall {
background:#222;
padding:10px;
color:#fff;
}
&#13;
<div id="checkbox">
<label>
<input id="highlightall" type="checkbox"> Check all
</label>
</div>
<div class="checkboxall">
<div class="checkbox">
<label>
<input class="highlight" type="checkbox"> Checkbox1
</label>
</div>
<div class="checkbox">
<label>
<input class="highlight" type="checkbox"> Checkbox2
</label>
</div>
<div class="checkbox">
<label>
<input class="highlight" type="checkbox"> Checkbox3
</label>
</div>
</div>
&#13;
答案 1 :(得分:1)
document.getElementsByClassName
会返回NodeList
,您需要为每个人绑定点击event
处理程序。
要设置复选框border
,您需要使用outlineColor
和outlineStyle
属性。
对于绑定event
处理程序,您必须使用for
循环并为每个checkbox
DOM元素附加事件处理程序。
var checkboxes=document.getElementsByClassName("highlight");
for(var i=0;i<checkboxes.length;i++){
checkboxes[i].onclick=function(){
console.log("Current index: "+i);
if (checkboxes[i].checked) {
checkboxes[i].style.outlineColor = "red";
checkboxes[i].style.outlineStyle = "solid";
} else {
checkboxes[i].style.outlineColor = "none";
checkboxes[i].style.outlineStyle = "none";
}
};
}
.checkboxall {
background:#222;
padding:10px;
color:#fff;}
<div id="checkbox">
<label>
<input id="highlightall" type="checkbox"> Check all
</label>
</div>
<div class="checkboxall">
<div class="checkbox">
<label>
<input class="highlight" type="checkbox"> Checkbox1
</label>
</div>
<div class="checkbox">
<label>
<input class="highlight" type="checkbox"> Checkbox2
</label>
</div>
<div class="checkbox">
<label>
<input class="highlight" type="checkbox"> Checkbox3
</label>
</div>
</div>
但如果你看,它会显示errors
。这是因为当页面loads
时,preparePage
被调用并创建了context
。当您点击checkbox
元素时,saved
变量的最后一个值i
将为3
(如上面的代码段所示)。
为什么会出现这种情况?
因为preparePage()
函数中只有一个范围,所以i
变量仅绑定到该范围内的值。换句话说,每次循环更改i
的值时,它会更改在该范围内引用它的所有内容。
循环结束后,i
变量的值为3。
有人说,一种解决方案是使用let
关键字。
var checkboxes=document.getElementsByClassName("highlight");
for(let i=0;i<checkboxes.length;i++){
checkboxes[i].onclick=function(){
if (checkboxes[i].checked) {
checkboxes[i].style.outlineColor = "red";
checkboxes[i].style.outlineStyle = "solid";
} else {
checkboxes[i].style.outlineColor = "none";
checkboxes[i].style.outlineStyle = "none";
}
};
}
.checkboxall {
background:#222;
padding:10px;
color:#fff;}
<div id="checkbox">
<label>
<input id="highlightall" type="checkbox"> Check all
</label>
</div>
<div class="checkboxall">
<div class="checkbox">
<label>
<input class="highlight" type="checkbox"> Checkbox1
</label>
</div>
<div class="checkbox">
<label>
<input class="highlight" type="checkbox"> Checkbox2
</label>
</div>
<div class="checkbox">
<label>
<input class="highlight" type="checkbox"> Checkbox3
</label>
</div>
</div>
另一种方法是使用Immediately-invoked function expression。
对于closures
,请查看here。
var checkboxes=document.getElementsByClassName("highlight");
for(var i=0;i<checkboxes.length;i++){
(function(index){
checkboxes[index].onclick=function(){
if (checkboxes[index].checked) {
checkboxes[index].style.outlineColor = "red";
checkboxes[index].style.outlineStyle = "solid";
} else {
checkboxes[index].style.outlineColor = "none";
checkboxes[index].style.outlineStyle = "none";
}
};
}(i));
}
.checkboxall {
background:#222;
padding:10px;
color:#fff;}
<div id="checkbox">
<label>
<input id="highlightall" type="checkbox"> Check all
</label>
</div>
<div class="checkboxall">
<div class="checkbox">
<label>
<input class="highlight" type="checkbox"> Checkbox1
</label>
</div>
<div class="checkbox">
<label>
<input class="highlight" type="checkbox"> Checkbox2
</label>
</div>
<div class="checkbox">
<label>
<input class="highlight" type="checkbox"> Checkbox3
</label>
</div>
</div>
答案 2 :(得分:0)
注意:document.getElementsByClassName引用元素组
除了document.getElementsByClassName(“highlight”)之外,您可以使用document.getElementById(“highlightall”)
将您的Javascript文件更改为
function preparePage() {
document.getElementById("highlightall").onclick = function() {
if (document.getElementById("highlightall").checked) {
// use CSS style to show it
document.getElementsByClassName("checkbox")[0].style.border = "thick solid #FFFFFF";
} else {
// hide the div
document.getElementsByClassName("checkbox")[0].style.border = "none";
}
}
// now hide it on the initial page load.
document.getElementsByClassName("checkbox")[0].style.border = "none";
}
window.onload = function() {
preparePage();
};
我认为这可能会对你有所帮助
由于
答案 3 :(得分:0)
我在我的代码中完成了以下方法,它对我有所帮助。
在选中一个复选框时,我预先定义了一个类选择器名responded
,当选中该复选框时,它会动态添加到复选框中,并在我听到我们的时候添加了一个change
监听器DOM改变并操纵它。
因此,复选框周围会显示漂亮的边框。
const form = document.getElementById('registrar');
const input = form.querySelector('input');
const ul = document.getElementById('invitedList');
form.addEventListener('submit', (e) => {
e.preventDefault();
const text = input.value;
input.value = '';
const li = document.createElement('li');
li.textContent = text;
const label = document.createElement('label');
label.textContent = 'Confirmed';
const checkbox = document.createElement('input');
checkbox.type = 'checkbox';
label.appendChild(checkbox);
li.appendChild(label);
ul.appendChild(li);
});
ul.addEventListener('change', (e) => {
const checkbox = event.target;
const checked = checkbox.checked;
const listItem = checkbox.parentNode.parentNode;
if (checked) {
listItem.className = 'responded';
} else {
listItem.className = '';
}
});
/* responded */
.responded {
transition: 0.4s;
border-color: rgba(88, 183, 205, .9);
}
.responded label {
transition: 0.4s;
color: rgba(88, 183, 205, 1);
}
<body>
<div class="wrapper">
<header>
<h1>RSVP</h1>
<p>A Demo App</p>
<form id="registrar">
<input type="text" name="name" placeholder="Invite Someone">
<button type="submit" name="submit" value="submit">Submit</button>
</form>
</header>
<div class="main">
<h2>Invitees</h2>
<ul id="invitedList"></ul>
</div>
</div>
<script type="text/javascript" src="app.js"></script>
</body>