获取“预期对象”;使用包含字符串的变量作为getElementById()的参数时出现错误

Getting "object expected" error when using a variable containing a string as an argument for getElementById()

本文关键字:getElementById 变量 参数 错误 字符串 对象 预期对象 包含 获取      更新时间:2023-09-26

我正在做一个5只虫子在屏幕上随机飞行并从侧面反弹的动画。我创建了一个函数来为每个bug制作动画。这是函数的一部分。当我将bugName变量传递给getElementById()时,它包含字符串"bugOne"。当我使用这段代码时,我得到了这一行的对象预期错误。

 if (xDirection == "right" && xPosition > (widthMax - document.getElementById(bugName).width - flySpeed))
 xDirection = "left";

当我使用这段代码时,没有语法错误(尽管由于某种原因动画仍然不能正常工作)。

 if (xDirection == "right" && xPosition > (widthMax - document.getElementById("bugOne").width - flySpeed))
     xDirection = "left";

如何将bugName传递给getElementById()而不出现语法错误?

这就是"bugOne"如何进入bugName。我正在删除一些代码,只显示基本的。

我从主体onload事件处理程序中调用它。

<body onload="flyVar=setInterval('setBug(''bugOne'')', 30);">

在文档头部调用了这个函数

    function setBug(bugName) {
        flyBug(bugName);
}

调用了这个函数它也在文档头部

function flyBug(bugName) {
    if (bugName == "bugOne") {
        flySpeed = 5;
        xPosition = 0;
        yPosition = 100;
        xDirection = "right";
        yDirection = "up";
     if (xDirection == "right" && xPosition > (widthMax - document.getElementById(bugName).width - flySpeed))
         xDirection = "left";
}

这里的问题是setInterval()不直接支持包括参数(我目前无法测试,但我相信Mozilla在那里发现了以下内容:

回调参数

如果你需要传递一个参数给你的回调函数,但需要它在Internet Explorer中工作,其中不支持发送附加参数(也不支持setTimeout()或setInterval()),您可以包含此特定于ie的兼容性代码,它将启用HTML5标准参数在浏览器的通道功能,这两个计时器只是通过将它插入到脚本的开头。

[…示例代码…]

另一种可能性是使用匿名函数调用回调,但是这个解决方案有点贵。例子:

 var intervalID = setInterval(function() { myFunc("one", "two", "three"); }, 1000);

另一种可能是使用函数的绑定。例子:

 var intervalID = setInterval(function(arg1) {}.bind(undefined, 10), 1000);

因此,我相信您可以通过更改onload调用来纠正这种行为,如下所示:

<body onload="flyVar=setInterval(function() { setBug('bugOne'); }, 30);">