0

我有一张在事件 onload 上设置的图片:

function hideMe() {

        document.getElementById("navy1").style.display = "none";  
    }

我还有另一个功能可以在屏幕上设置图片:

    function setUpPicture() {

        subRunnerOBJ = new Object();
        subRunnerOBJ.topPos = 100;
        subRunnerOBJ.leftPos = 0;
        subRunnerOBJ.velX = 400;
        subRunnerOBJ.velY = 0;
        subRunnerOBJ.score = 0;



        snImgObj = document.getElementById("navy1");

//此时我收到消息“Microsoft JScript 运行时错误:无法获取属性'style'的值:对象为空或未定义”

        snImgObj.style.left = subRunnerOBJ.leftPos + "px";
        snImgObj.style.top = subRunnerOBJ.topPos + "px";
        snImgObj.style.position = "absolute";
        snImgObj.style.display = "show";

        startMovePicture();

知道为什么会这样吗?

 //this one will set the the pictue on the right side of the screen
    function setUpPicture() {

        subRunnerOBJ = new Object();
        subRunnerOBJ.topPos = 100;
        subRunnerOBJ.leftPos = 0;
        subRunnerOBJ.velX = 400;
        subRunnerOBJ.velY = 0;
        subRunnerOBJ.score = 0;


        //document.getElementById("navy1").style.display = "show";
        snImgObj = document.getElementById("navy1");
        snImgObj.style.left = subRunnerOBJ.leftPos + "px";
        snImgObj.style.top = subRunnerOBJ.topPos + "px";
        snImgObj.style.position = "absolute";
        snImgObj.style.display = "show";
        //once we place the location of the sub , we will Call to new function that will move it
        startMovePicture();



    }
    function startMovePicture() {

        dt = 50; // in miliseconds
        h = setInterval("moveObj(subRunnerOBJ)", dt);

    }


    function moveObj(someObj) {
        counter = 0;



        while (counter < 3000) {

            subRunnerOBJ.leftPos = subRunnerOBJ.leftPos + subRunnerOBJ.velX * dt / 1000;
            subRunnerOBJ.topPos = subRunnerOBJ.topPos + subRunnerOBJ.velY * dt / 1000;

            snImgObj.style.left = subRunnerOBJ.leftPos + "px";
            snImgObj.style.top = subRunnerOBJ.topPos + "px";

            counter = counter + 50;

            if (counter == 3000) {

                stopRunning()

            }

        }

    }

    function stopRunning() {

        clearInterval(h);
        hideMe();
    }

    //this function will hide the pucture on liad , and once the loop with the Pictue Running will end
    //once loading the page we will not see the Picture 
    function hideMe() {

        document.getElementById("navy1").style.display = "none";  
    }



    }
4

2 回答 2

1

无法获取属性“样式”的值:对象为空或未定义”

这意味着您正在尝试使用对象的属性,而该对象实际上是一个nullundefined值。在你的情况下snImgObjnull.

发生这种情况是因为以下代码无法找到 id 为“navy1”的元素

snImgObj = document.getElementById("navy1"); // snImgObj is NULL in your case

这可能有很多原因:

  1. 您的元素根本不存在。
  2. 您忘记设置 id 或拼写错误的 id 声明。
  3. 您在尝试通过 id 获取元素后创建元素。
  4. 您的元素存在,但尚未完成加载。
  5. ... ETC。

如果您打算使用 来创建元素getElementById,则应改用以下方法:

var element = document.createElement('div'); // creates a dangling DOM node
someOtherElement.appendChild(element); // appends it to another element

似乎旧版本的 Internet Explorer 不允许以这种方式创建图像,但您可以阅读此答案以了解如何以跨浏览器的方式完成。

  1. CSSdisplay属性不理解“显示”。您可能希望将其设置为“阻止”。请参阅显示属性的文档

    snImgObj.style.display = "block"; // this is valid
    
  2. var声明变量时总是使用!您正在污染全局范围。

  3. 不要将字符串传递给setInterval,它接受函数
  4. 使用JSLint验证您的代码。它会告诉你你的大部分问题在哪里。这很值得!
于 2012-06-19T10:31:59.320 回答
0

问题是snImgObj没有设置到setUpPicture(). 仔细检查您的 HTML。

于 2012-06-18T23:33:37.403 回答