我已经使用javascript创建了一个表格,并在每个单元格中填充了月份的名称。我想分配一个OnClick函数,该函数检查单击了哪些单元格并将名称发送到console.log()。这是我到目前为止所管理的:
<script>
function monthCalender() {
var chkbxMonth = document.querySelectorAll('#checkboxMonth');
var body = document.getElementsByTagName("body")[0];
var tbl = document.createElement("table");
tbl.id = ("Month_Table");
var tblBody = document.createElement("tbody");
for (row = 0; row < 4; row++) {
var tblRow = document.createElement("tr");
for (col = 0; col < 3; col++) {
var cell = document.createElement("td");
var a = (row * 3) + col;
cell.id = "Month_" + a;
cell.setAttribute("data-val", chkbxMonth[a].querySelector(".checkboxMonth").id);
var cellContent = document.createTextNode(chkbxMonth[a].textContent);
cell.appendChild(cellContent);
tblRow.appendChild(cell);
}
tblBody.appendChild(tblRow);
}
tbl.appendChild(tblBody);
body.appendChild(tbl);
tbl.setAttribute("border", "2");
$(function () {
$('td').click(function () {
$(this).toggleClass('on');
})
});
var rows = document.getElementById("Month_Table").rows;
for (var p = 0; p < rows.length; p++) {
var col = rows[p].getElementsByTagName("td");
for (q = 0; q < col.length; col++) {
console.log(col[q]);
//col.forEach(k => k.addEventListener('onClick', event => {
// console.log("Cell has been checked");
//}));
}
}
}
monthCalender();
</script>
我遇到的问题是当我编写console.log(col [q])(位于脚本底部附近)时,它仅将第一列的单元格发送到控制台,而不是所有单元格。我是不正确地遍历单元格还是错过了另一个循环?
还可以在哪里添加onclickAddevent侦听器?
答案 0 :(得分:1)
您的代码正在尝试将OnClick分配给各列。您需要将其分配给每个单元格。这是实现此目的的示例:
我使用了在代码中分配的“ Month_Table” ID。
document.querySelectorAll('#Month_Table td')
.forEach(e => e.addEventListener("click", function() {
// Dos something here
console.log("clicked")
}));
答案 1 :(得分:0)
为什么要混合使用jQuery和常规javascript? 看来jQuery已集成到您的项目中,因此您可以将click事件绑定到所有单元而没有循环:
$("td","#Month_Table").click(function(e){
$(this).toggleClass('on');
console.log("Cell has been checked");
};