我有一个按一天中的时间设置一周中的几天的网格,网格上的每个插槽都是一个复选框,供我的站点用户指示可用性。由于这最终是大量的插槽,我希望插槽的背景颜色根据是否选中而改变,但同样由于插槽数量众多,我不想添加每个 ID 的事件侦听器。是否可以为该类添加一个侦听器并传递单击元素的 ID,以便仅更改其背景?
问问题
5196 次
4 回答
2
你必须使用事件委托来完成这个,简单的例子
document.addEventListener('change', function(e){alert(e.target.id)});
于 2013-05-26T18:29:16.320 回答
0
我使用以下代码来解决您遇到的问题。
<!DOCTYPE html>
<html>
<head>
<style type="text/css">.lw {
border: 1px solid red;
font-size: 60px;
}
tr td{
border: 1px solid red;
width: 40px;
height: 40px;
}</style>
<title>HTML5, CSS3 and JavaScript demo</title>
</head>
<body>
<!-- Start your code here -->
<div>
<table class="gameboard">
<tbody>
<tr>
<td class="slot" id="One">x</td>
<td class="slot" id="Two"></td>
<td class="slot" id="Three"></td>
</tr>
<tr>
<td class="slot" id="Four"></td>
<td class="slot" id="Five"></td>
<td class="slot" id="Six"></td>
</tr>
<tr>
<td class="slot" id="Seven"></td>
<td class="slot" id="Eight"></td>
<td class="slot" id="Nine"></td>
</tr>
</tbody></table>
</div>
<div>
<p id="titleOf" class="lw">Hello Weaver!</p>
</div>
<!-- End your code here -->
<script>/* Write JavaScript here */
var a = document.getElementById("titleText");
var b = document.getElementById("titleOf");
var c = document.getElementsByClassName("gameboard");
var piece = document.getElementsByClassName('slot');
var Gamelogic = {
checkFirst:false,
makeX: function(e){
for(var i= 0; i< piece.length - 1; i++){
if(e.path[i]){
e.path[0].innerText = "X";
e.path[0].style.backgroundColor = "green" ;
console.log(e.path);
console.log(e.path[0]);
console.log(e.path[i]);
}
break;
}
}
};
c[0].addEventListener("click", Gamelogic.makeX); // if the table is clicked
</script>
</body>
于 2015-01-14T09:02:30.833 回答
0
假设您的复选框是<td>
元素的子节点,您可以使用以下代码:
var checkedList = document.getElementsByClassName('checked');
for(var i = 0; i < checkedList.length; i++) {
var current = checkedList[i],
parent = current.parentNode; //it is the td
if (current.checked) parent.style.backgroundColor = 'color';
}
工作JSFiddle
如果你想让它完全动态,你应该像 Musa 所说的那样添加一个事件监听器。
document.addEventListener('change', function(e){
var current = e.target,
parent = current.parentNode;
if (current.checked) parent.style.backgroundColor = 'color';
});
于 2013-05-26T18:30:22.003 回答
0
这是一个可以解决您的问题的逻辑。我会建议使用一些框架“jquery”来轻松工作
var checkedList = document.getElementsByClassName('checkboxes');
checkedList.addEventListener('change', function(e){
var node = e.target;
if(node.checked){
node.parentElement.style.background-color='grey';
}else{
node.parentElement.style.background-color='white';
}
});
于 2013-05-26T18:53:44.133 回答