Javascript:UncaughtTypeError:无法设置属性';innerHTML';空值(5)

Javascript:UncaughtTypeError:无法设置属性';innerHTML';空值(5),javascript,html,typeerror,Javascript,Html,Typeerror,错误在哪里,我基本上是在尝试获取网格显示W或B,但它只是一直显示错误,这是一个typeError:无法将属性'innerHTML'设置为null。从昨天晚上开始我一直在试着调试它。我对HTML非常陌生 功能播放(id) { //var first=document.getElementById(“当前”).innerHTML; //document.getElementById(id).innerHTML=first; //如果(第一个==“B”) //{ //document.getEl

错误在哪里,我基本上是在尝试获取网格显示W或B,但它只是一直显示错误,这是一个typeError:无法将属性'innerHTML'设置为null。从昨天晚上开始我一直在试着调试它。我对HTML非常陌生


功能播放(id)
{
//var first=document.getElementById(“当前”).innerHTML;
//document.getElementById(id).innerHTML=first;
//如果(第一个==“B”)
//{
//document.getElementById(“当前回合”).innerHTML=“W”;
//}
//否则
//{
//document.getElementById(“当前回合”).innerHTML=“B”;
//}
var currentTurn=document.getElementById(“current_turn”).innerHTML;
document.getElementById(id).innerHTML=currentTurn;
if(document.getElementById(id)=“X”)
{
document.getElementById(“当前回合”).innerHTML=“O”;
}
其他的
{
document.getElementById(“当前回合”).innerHTML=“X”;
}
}
五子棋
介绍
当前回合:X


您的play函数接受两个参数,假设它符合元素ID的格式,则只使用函数体中的第一个参数

所以你应该把你的函数改成

Function play ( x, y ){
    var id = x+"-"+y;
    //...
}
关于代码wrt可维护性和最佳实践,还有一些问题:

  • 使用类型安全比较(
    ==
    !==
    而不是
    =
    !=
  • 将html定义与事件处理程序分配分开。 免费软件为实现这一目标提供支持并提供帮助 具有许多其他功能,特别是跨浏览器代码规范化

您需要更改
函数play(id)
onclick
调用,因为两个参数不匹配,因此它会为innerHTML属性抛出null,因为无法获取第行指定了id的元素

document.getElementById(id).innerHTML = currentTurn;
更改功能如下:

function play(id1, id2)
{
  var id = id1+"-"+id2;
  // then write your if else part
}
或按如下所示更改onclick:

onclick="play('0-3');"

您不应该将脚本放在当前回合:X
之前


您将一无所获,因为您已定义了
当前\u回合

您已使用一个参数编写了函数play(id),并使用两个参数“”调用它……这是如何工作的,但它只能打印X,不能打印O。我希望每次点击它都能关机。你也能帮我吗?谢谢。将您的条件更改为
if(document.getElementById(id).innerHTML==“X”)
。这不重要,因为
play()
是通过
onclick
处理程序调用的。一旦页面被完全加载并且单击了其中一个div,整个DOM应该对函数可用。
onclick="play('0-3');"