我有下面的代码,应该将单击事件监听器添加到表的每个单元格,但是如果我将函数名称与参数放在一起,函数似乎会在解释器满足要添加的指令时启动事件监听器。我该如何解决这个问题?
function startGame() {
for(var i = 1; i <= 16; i++) {
var cellValue = Math.floor(Math.random() * 16);
while(isPresent(cellValue)) {
cellValue = Math.floor(Math.random() * 16);
}
numbers[cellValue] = true;
var cell = document.getElementById("cell" + i);
cell.addEventListener("click", selectCell(cell), false);
if(cellValue == 0) {
cell.innerHTML = "";
cell.setAttribute("class", "emptyCell");
} else {
cell.removeAttribute("class");
cell.innerHTML = cellValue;
}
}
}
function selectCell(cell) {
if(!isCellSelected) {
cellSelected = cell;
isCellSelected = true;
} else if(cell == cellSelected) {
cellSelected = null;
isCellSelected = false;
} else {
var cellID = cell.id;
var effectiveID = parseInt(cellID.substring(4, 6));
if(isGranted(effectiveID)) {
//COMPLETARE METODO
} else {
window.alert("Selezionare solo una cella adiacenta alla cella già selezionata.");
}
}
}
function isGranted(id) {
var result;
var existentEffectiveID = parseInt(cellSelected.id.substring(4, 6));
//Se la cella selezionata è la successiva o precedente in termini orizzontali o verticali allora si puo' selezionare
if(id == existentEffectiveID - 4 || id == existentEffectiveID + 4 || id == existentEffectiveID + 1 || id == existentEffectiveID - 1) {
result = true;
} else {
result = false;
}
return result;
}
最佳答案
删除 cell.addEventListener("click", selectCell(cell), false);
上的参数并使用 cell.addEventListener("click", selectCell, false);
代替。您可以在函数内部使用 this
来引用被点击的元素单元格。
关于javascript - 无法将 EventListener 添加到 javascript 中的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30087754/