Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 表格单元格未将其ID传递到my函数';s参数_Javascript_Html_Web Applications_Event Handling_Event Listener - Fatal编程技术网

Javascript 表格单元格未将其ID传递到my函数';s参数

Javascript 表格单元格未将其ID传递到my函数';s参数,javascript,html,web-applications,event-handling,event-listener,Javascript,Html,Web Applications,Event Handling,Event Listener,我的小代码 我想做的事 我现在正在学习javascript,初学者web开发人员。我正在通过构建一个简单的tic-tac-toe应用程序进行练习。tic tac toe表中的每个单元格都有一个从0到8的id,当我尝试将该id附加到tileSelected()函数时(例如,当单击tile时),每个单元格的所有onclick事件都会保留最后一个单元格的id。(JS代码7至9) (i=0;i

我的小代码

我想做的事

我现在正在学习javascript,初学者web开发人员。我正在通过构建一个简单的tic-tac-toe应用程序进行练习。tic tac toe表中的每个单元格都有一个从0到8的id,当我尝试将该id附加到tileSelected()函数时(例如,当单击tile时),每个单元格的所有onclick事件都会保留最后一个单元格的id。(JS代码7至9)

(i=0;i<9;i++)的
{
document.getElementById(i.toString()).onclick=function(){tileSelected(i.toString());}
}
我尝试过的

我之前多次修改代码,将ID传递到onclick事件的函数中,尽管每次都有相同的问题


那么这里的bug是什么?我做错了什么?

正如您为循环声明的
I
是一个全局变量。当这些循环完成时,
i
的值为9。调用回调函数时看到的值是9。如果您使用
for(让i=0;i<9;i++)
将变量范围限定到循环,您将看到一个改进。

正如您为
循环声明的
i
是一个全局变量。当这些循环完成时,
i
的值为9。调用回调函数时看到的值是9。如果您通过使用(让i=0;i<9;i++)的
将变量范围限定到循环中,您将看到一个改进。

您的
i
值是9,因此您将选择函数调用
i.toString()
,因此它始终是9

您可以使用
this
并传递id。
this
关键字计算为当前执行上下文的此绑定的值

tileSelected(this.id)

(i=0;i<9;i++)的
{
document.getElementById(i.toString()).onclick=function(){tileSelected(this.id);}

}
您的
i
值是9,因此您将选定的函数调用
i.toString()
与一起平铺,因此它始终是9

您可以使用
this
并传递id。
this
关键字计算为当前执行上下文的此绑定的值

tileSelected(this.id)

(i=0;i<9;i++)的
{
document.getElementById(i.toString()).onclick=function(){tileSelected(this.id);}
}
for(i = 0; i < 9; i++) {
document.getElementById(i.toString()).onclick = function() { tileSelected(i.toString()); }
}