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

时间:2013-04-09 19:04:11

标签: javascript setinterval getelementbyid

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

 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。我删除了一些代码,只显示了基础知识。

我从body 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";
}

1 个答案:

答案 0 :(得分:0)

这里的问题是setInterval()不直接支持包含参数(我目前无法对此进行测试,但I believe 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);">