TypeError:getElementById为null

时间:2014-07-26 15:18:37

标签: javascript dom getelementbyid referenceerror

<html>
    <head>
        <script type="text/javascript">
            var image = document.getElementById(image);
            var desc = document.getElementById(desc);
            var images = ["http://i.imgur.com/XAgFPiD.jpg", "http://i.imgur.com/XAgFPiD.jpg"]
            var descs = ["1", "2"]
            var num = 0;
            var total = images.length;
            function clicked(){
                 num = num + 1;
                 if (num > total){
                    num = 0;
                 }
                 image.src = images[num];
                 desc.innerHTML = images[num];
            }
            document.getElementById(submit).onclick(clicked());
        </script>
    </head>
<body>
    <div><h2>Project |</h2><h2> | herbykit</h2></div>
    <div>
        <button id="submit">Next</button><br/>
        <img id="image" src="http://i.imgur.com/XAgFPiD.jpg" height="20%" width="50%"/>
        <p id="desc">first desc.</p>
   </div>
</body>
</html>

“document.getElementById(submit).onclick(clicked());”抛出错误     “ReferenceError:未定义提交”

当我尝试访问按钮时 [通过getElementsByClassName&amp;的getElementsByTagName]
它给出了错误“ReferenceError:button is not defined”

在getElementById中使用字符串会抛出错误“getElementById为null”

我发现了几个问题和答案。

由于使用了PHP而且其他大多数错误都是错误的,因此我只了解了其中的一个。我发现的其他解决方案涉及数字错误。 在这个错误上,我尝试修复printwindow.document.getElementById(..等 这给了我一个错误“ReferenceError:printwindow is not defined”

4 个答案:

答案 0 :(得分:1)

浏览器会尽快运行JavaScript以加快渲染速度。所以当你收到这段代码时:

<html>
    <head>
        <script type="text/javascript">
            var image = document.getElementById(image); // Missing quotes, typo?

......在中间运行。页面上还没有<foo id="image">,因此您获得null。最后,您将获得呈现的其余页面,包括:

<img id="image" src="http://i.imgur.com/XAgFPiD.jpg" height="20%" width="50%"/>

你的代码很久以前就已经运行了,为时已晚。

你需要绑定一个window.onload甚至处理程序并在DOM准备就绪时运行你的代码(或者将所有JavaScript移到页面底部,在图片之后)。

答案 1 :(得分:1)

您在渲染“正文”之前执行了javascript。因此document.getElementById(“submit”)将返回null。因为还没有“提交”DOM元素。

一种解决方案是将你的javascripts移动到'body'下,或者使用JQuery with

$(document).ready(function() {
    ...
});

您的变量也有范围问题,您的函数无法使用'var'声明访问此函数外部声明的变量。如果你真的需要那个变量,你应该删除'var'声明。 更好的方法是将所有变量移动到单击的函数中。喜欢以下代码

<html>
    <head>
    </head>
<body>
    <div><h2>Project |</h2><h2> | herbykit</h2></div>
    <div>
        <button id="submit">Next</button><br/>
        <img id="image" src="http://i.imgur.com/XAgFPiD.jpg" height="20%" width="50%"/>
        <p id="desc">first desc.</p>
   </div>


</body>
<script type="text/javascript">            
            function clicked(){
                var image = document.getElementById("image");
                var desc = document.getElementById("desc");    
                var images = ["http://i.imgur.com/XAgFPiD.jpg", "http://i.imgur.com/XAgFPiE.jpg"];   
                var descs = ["1", "2"];
                var num = 0;
                var total = images.length;     
                num = num + 1;
                if (num > total){
                    num = 0;
                }
                image.src = images[num];
                desc.innerHTML = images[num];
            }
            document.getElementById("submit").onclick = clicked;
        </script>
</html>

答案 2 :(得分:0)

应为document.getElementById('submit').onclick(clicked());

答案 3 :(得分:0)

您必须在引号中附上您要搜索的ID:

document.getElementById('ID_to_look_up');