【发布时间】:2022-01-09 17:40:45
【问题描述】:
本质上,我希望用户能够单击并按住鼠标并滚动表格中任意数量的单元格,只要他们滚动一个单元格,它就会改变颜色。问题是,当用户经常单击一个单元格时,我希望该单元格改变颜色,并且我有一个单独的事件侦听器可以做到这一点。
这是我的 html 表格
<table class="c-table" onmousedown="hoverColorFill()">
这是我为尝试处理鼠标悬停情况而创建的 js 函数,我对此进行了描述:
function hoverColorFill(){
elements = document.querySelectorAll(':hover');
for(let i=0; i<elements.length; i++){
elements[i].style.backgroundcolor = colorEl.value
}
}
这是当有人简单地点击我的单元格时我拥有的代码:
table.addEventListener('click', (event) => {
const rows = document.querySelectorAll('tr');
const rowsArray = Array.from(rows);
const rowIndex = rowsArray.findIndex(row => row.contains(event.target));
const columns = Array.from(rowsArray[rowIndex].querySelectorAll('td'));
const columnIndex = columns.findIndex(column => column == event.target);
document.querySelector(".c-table").tBodies[0].rows[rowIndex-1].cells[columnIndex].style.backgroundColor = colorEl.value
})
hoverColorFill() 函数似乎不起作用,当我将鼠标拖到我的桌子上时,该函数被调用(它可以打印到控制台)但它不会改变颜色。我的单击事件侦听器功能完全正常,但它偶尔会出现此错误:未捕获的类型错误:无法在 HTMLTableElement 处读取未定义的属性(读取“样式”)。 但不工作的功能不会引发任何错误。
编辑:我在这里没有使用 eventListener 的原因是因为我无法弄清楚如何做到这一点,以便它同时关注悬停和鼠标悬停。
【问题讨论】:
-
请访问help center,使用tour查看内容和How to Ask。做一些研究,搜索关于 SO 的相关主题;如果您遇到困难,请发布您的尝试的minimal reproducible example,注意输入和预期输出,最好在Stacksnippet
标签: javascript html css event-listener onmousedown