如何使用 .addEventListener 打印出数组的特定项?

Posted

技术标签:

【中文标题】如何使用 .addEventListener 打印出数组的特定项?【英文标题】:How to print out the specific item of an array using .addEventListener? 【发布时间】:2019-11-03 15:30:26 【问题描述】:

我正在创建一种井字游戏。我在.html 中绘制了一个网格,我试图让每个框在按下时都说“你点击了'框位置'”。

元素 id 的标签是从 0 到 8。

let grid =['topLeft','topMid','topRight','midLeft','midMid','midRight','botLeft','botMid','botRight'];

var clickFunction = function() 

    console.log("You Clicked " + grid[i]);  
;

for(i=0; i<grid.length; i++) 
    grid[i] = document.getElementById(i);
    grid[i].addEventListener("click", clickFunction);

它当前打印出“您单击了未定义”。例如,如何让它打印“You clicked topLeft”?

【问题讨论】:

【参考方案1】:

将索引传递给clickFunction

var clickFunction = function(i) 

console.log("You Clicked " + grid[i]);  
;

for(i=0; i<grid.length; i++) 
  grid[i] = document.getElementById(i);
  grid[i].addEventListener("click", () => clickFunction(i));

【讨论】:

【参考方案2】:

对于第一个:更改此行:

grid[i] = document.getElementById(i);

到:

ele = document.getElementById(grid[i]);

因为您需要保存处理程序中每个元素的 i 值,您可以将处理程序更改为:

var clickFunction = function(i) 
    return function(e) 
       console.log("You Clicked " + grid[i]);
    
;

这样,当您附加处理程序 (... clickFunction(i)) 时,您会保存变量的值。

let grid =['topLeft','topMid','topRight','midLeft','midMid','midRight','botLeft','botMid','botRight'];

var clickFunction = function(i) 
    return function(e) 

        console.log("You Clicked " + grid[i]);
    
;

for(i=0; i<grid.length; i++) 
    ele = document.getElementById(grid[i]);
    ele.addEventListener("click", clickFunction(i));
<button id="topLeft">topLeft</button>
<button id="topMid">topMid</button>
<button id="topRight">topRight</button>
<button id="midLeft">midLeft</button>
<button id="midMid">midMid</button>
<button id="midRight">midRight</button>
<button id="botLeft">botLeft</button>
<button id="botMid">botMid</button>
<button id="botRight">botRight</button>

【讨论】:

以上是关于如何使用 .addEventListener 打印出数组的特定项?的主要内容,如果未能解决你的问题,请参考以下文章

addEventListener JavaScript 中定义的变量

如何使用addEventListener添加事件

如何使用addEventListener添加事件

如何在游戏循环中使用 addEventListener

如何使用 addEventListener(webkitTransitionEnd) 在 window.close() 之前延迟?

Service-Worker addEventListener,如何使用事件参数?