Javascript 试图调用hasChildNodes方法,但getting无法读取Null的属性

Javascript 试图调用hasChildNodes方法,但getting无法读取Null的属性,javascript,html,dom,Javascript,Html,Dom,我正在尝试制作一个简单的回合制双人游戏(如FE),作为即将到来的项目的练习。为了确保同一网格图块上没有字符重叠,我尝试创建一个验证器函数,我可以在生成时为每个字符调用(随机生成的位置),这样我就不会有相同的脚本,每个字符生成部分都有微小的更改。我的原始代码(没有函数)如上所示,最近的尝试(有一些上下文)如下所示: function bTeamCharGen() { var a = 10; var b = 15; var c = 0; var

我正在尝试制作一个简单的回合制双人游戏(如FE),作为即将到来的项目的练习。为了确保同一网格图块上没有字符重叠,我尝试创建一个验证器函数,我可以在生成时为每个字符调用(随机生成的位置),这样我就不会有相同的脚本,每个字符生成部分都有微小的更改。我的原始代码(没有函数)如上所示,最近的尝试(有一些上下文)如下所示:

    function bTeamCharGen() {
      var a = 10;
      var b = 15;
      var c = 0;
      var d = 5;

      var bTeamLead = document.createElement("img");
      bTeamLead.src = "images/transp_img.gif";
      bTeamLead.height = "38";
      bTeamLead.width = "38";
      bTeamLead.className = "lead";
      bTeamLead.id = "bLead";
      genStartPos();
      var curr = document.getElementById("gridBlock_" + i + "_" + j);
      if (curr.hasChildNodes()) {
        while (curr.hasChildNodes()) {
          genStartPos(a, b, c, d);
        }
      }
      document.getElementById("gridBlock_" + i + "_" + j).appendChild(bTeamLead);
      document.getElementById("bLead").style.background = "url('images/eirika_1_1.gif') 0 0";
      document.getElementById("bLead").style.backgroundRepeat = "no-repeat";
      //commented out basic structure for further characters here
    }
这是其中一个字符的原始代码。以下是我目前得出的结论(仍然存在未捕获的TypeError):


这是一个有点长和笨拙,因为我仍然试图整理它相当多,但一切工作,直到我这样做了。我调用initialise函数作为主体的onload,而
中,因为我之前在
中使用它时遇到问题,我不确定,但是。。。当
“gridBlock”+I+“+j
未定义时,我认为您正在尝试获取元素

您可以在没有任何参数的情况下调用
genStartPos()
。因此,您的
i
j
未定义,因此您使用元素id字符串

如果无法将变量传递给
genStartPos()
,则需要为maxX、maxY…设置一些默认值


PS当a、b、c、d未定义时,您也可以调用
genStartPos(a、b、c、d)
。或者这可能不是你展示的所有代码

是的,还有很多代码,但这些是独立于这些函数的函数,根本没有改变。
“gridblock”\ui“+”j”
是其中的第一个东西(它在
makeGrid()
中定义),但是其他所有使用它作为基础的东西都工作得很好,所以我怀疑这是不是。对于'genStartPos(a,b,c,d)
,我在
bTeamCharGen()
中定义了它们。因此,在
bTeamCharGen()
中调用时,参数不会通过
validStartPos`传递到
genStartPos(a、b、c、d)
?我知道这可能是个问题,但不是因为未捕获的TypeError…@Kristen Ramcharan,
bTeamCharGen()
中的a、b、c、d是本地的。它们只在这个函数中定义,所以
validStartPos()
不知道它们,好吧。。。但是,假设我在
validStartPos()
中定义它们(或者从
bTeamCharGen()
中传递值),那么这应该不会有问题。我也会解决这个问题,非常感谢!
    var i, j;

    //functions to generate grid and background

    function genStartPos(minX, maxX, minY, maxY) {
      i = Math.floor(Math.random() * (maxX - minX + 1) + minX);
      j = Math.floor(Math.random() * (maxY - minY + 1) + minY);
    }

    function validStartPos() {
      genStartPos();
      var curr = document.getElementById("gridBlock_" + i + "_" + j);
      if (curr.hasChildNodes()) {
        while (curr.hasChildNodes()) {
          genStartPos(a, b, c, d);
        }
      }
    }

    function bTeamCharGen() {
      var a = 10;
      var b = 15;
      var c = 0;
      var d = 5;

      var bTeamLead = document.createElement("img");
      bTeamLead.src = "images/transp_img.gif";
      bTeamLead.height = "38";
      bTeamLead.width = "38";
      bTeamLead.className = "lead";
      bTeamLead.id = "bLead";
      validStartPos();
      document.getElementById("gridBlock_" + i + "_" + j).appendChild(bTeamLead);
      document.getElementById("bLead").style.background = "url('images/eirika_1_1.gif') 0 0";
      document.getElementById("bLead").style.backgroundRepeat = "no-repeat";

      //commented out basic structure for further characters here
    }

    function initialise() {
      makeGrid();
      setBackground();
      bTeamCharGen();
      rTeamCharGen();
    }