Javascript 在addEventListener管理的click事件中使用此选项

Javascript 在addEventListener管理的click事件中使用此选项,javascript,this,Javascript,This,我正在尝试这段非常简单的代码,以在纯Javascript中实现TictaToe: function inizializza() { var x = document.querySelectorAll(".riga div"); var i; for (i = 0; i < x.length; i++) { document.querySelectorAll(".riga div")[i].addEventListener("click", cambia);

我正在尝试这段非常简单的代码,以在纯Javascript中实现TictaToe:

function inizializza()
  {
  var x = document.querySelectorAll(".riga div");
  var i;
  for (i = 0; i < x.length; i++) {
    document.querySelectorAll(".riga div")[i].addEventListener("click",
    cambia);
     }

  }

var segno = "X";

function cambia()
 {
 if (this.innerHTML != "")
   {
   alert("ERRORE!")
   }
 else
  {
  this.innerHTML = segno;
  if (segno == "X")
     segno = "O";
  else
    segno = "X";
  }
 }
函数
{
var x=document.queryselectoral(“.riga div”);
var i;
对于(i=0;i
函数()在body load上调用

当您单击.riga div(我游戏表中的一个单元格)时,事件单击应更改单元格中显示的文本:X或O。但这不起作用,因为我无法使用“this”kewyword检索单击的对象属性

我怎么做

非常感谢!
Giancarlo

您可以在此处使用闭包

检查以下代码段

window.onload=function(){
阿利扎();
}
函数名为alizza(){
var x=document.queryselectoral(“.riga div”);
var i;
对于(i=0;i

1.
2.
3.
X

您可以使用传递的事件对象作为单击事件的第一个参数

event.target适用于大多数浏览器,event.srcement适用于少数旧的microsoft浏览器

function inizializza()
{
  var x = document.querySelectorAll(".riga div");
  console.log(x);
  var i;
  for (i = 0; i < x.length; i++) {
    document.querySelectorAll(".riga div")[i].addEventListener("click",
    cambia);
     }
 }

 var segno = "X";

 function cambia(event)
 {

  var element = event.target || event.srcElement;

  if (target.innerHTML !== "")
  {
   alert("ERRORE!")
  }
  else
  {
  this.innerHTML = segno;
  if (segno == "X")
     segno = "O";
  else
    segno = "X";
  }
 }
函数
{
var x=document.queryselectoral(“.riga div”);
控制台日志(x);
var i;
对于(i=0;i

工作示例:

那么
e.target
呢?