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