【发布时间】:2018-09-30 18:57:09
【问题描述】:
假设我有一个如下所示的网格(单元格内的数字仅用于标记,它可能只是空单元格):
用HTML写成如下:
<table>
<tr>
<td>0 </td>
<td>1 </td>
</tr>
<tr>
<td>2 </td>
<td>3 </td>
</tr>
</table>
我想做两件事:
- 添加一些 JavaScript 代码,在单击每个单元格时将单元格的编号记录到控制台。我是这样做的:
const cells = document.querySelectorAll('td'); for (var i = 0; i < cells.length; i++) { cells[i].addEventListener('click', function () { console.log(i); }); }
但是无论我在哪里单击表格,控制台总是返回值 4。我的问题是:
- 通过在for循环的每次迭代中添加cells[i].addEventListener,是否会为每个cell添加一个事件监听器?
- 为什么即使我点击了单元格[0]、单元格[\1]、单元格[2]或单元格[3],控制台总是返回4?
- 我应该怎么做才能使控制台返回数组单元格中的所需位置,即如果单击单元格 [0] 则返回 0,如果单击单元格 [\1] 则返回 1,如果单击单元格 [2] 则返回 2 ],如果我单击单元格[3],则返回 3?
接下来,
- 我想做的第二件事是根据我从 HTML 设置的颜色选择器中选择的颜色更改每个单元格的颜色:
<input type="color" id="colorPicker">
我是这样做的:
const cells = document.querySelectorAll('td');
for (var i = 0; i < cells.length; i++) {
cells[i].addEventListener('click', function () {
const color = document.querySelector('#colorPicker').value;
cells[i].style.backgroundColor = color;
});
}
但是单元格的颜色没有改变。
我不打算使用 jQuery,我只想使用基本的 JavaScript 来为每个单元格添加一个事件监听器。几个小时以来,我一直试图找出一些方法,但最终还是一无所知。有人可以帮忙吗?非常感谢,谢谢!
【问题讨论】:
-
更多关于为什么添加到循环中的事件监听器都在记录
4,以及修复它的各种方法,请参阅这个问题及其答案,以及几个相关的:@ 987654322@
标签: javascript html events dom addeventlistener