javascript - 无法将 EventListener 添加到 javascript 中的对象

标签 javascript html css web

我有下面的代码,应该将单击事件监听器添加到表的每个单元格,但是如果我将函数名称与参数放在一起,函数似乎会在解释器满足要添加的指令时启动事件监听器。我该如何解决这个问题?

    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/

相关文章:

javascript - 谷歌浏览器打印问题搞砸了文本

html - AngularJS 编译模型类似于 StackOverflow

jquery - 是否可以将此菜单设为垂直?

javascript - 将 iframe 插入 Angular 应用程序

javascript 替换函数只替换第一次出现的

javascript - HTML - 如何在固定上下文中的移动设备上拖放

javascript - Jquery 无法使用我的代码

html - 响应时将图像保留在框内

html - 如何在进度条之后插入文本

javascript - 如何用用户脚本覆盖警报功能?