为什么这个简单的代码不会运行?

时间:2013-08-12 12:58:37

标签: javascript html

<html>
    <head>
    </head>
    <body>
<script>


function toD(angle) {
  return angle * (180 / Math.PI);
}
var a = document.getElementById('test').innerHTML = toD(15);
</script>

<p id='test'> </p>

    </body>
    </html>

抱歉,我不确定我是否遗漏了什么,但为什么这段代码没有运行?提前谢谢,对不起,如果这是一个愚蠢的问题!

6 个答案:

答案 0 :(得分:9)

在您的脚本var a = document.getElementById('test').innerHTML = toD(15);中运行时<p id='test'> </p>不存在。

将脚本放在<p id='test'> </p>之后,或将整个脚本包装在自己的函数中并将其分配给onload,以便它仅在<p id='test'> </p>之后运行,其余的DOM可用

无论

<html>
    <head>
    </head>
    <body>

<p id='test'> </p>

<script>
function toD(angle) {
  return angle * (180 / Math.PI);
}
var a = document.getElementById('test').innerHTML = toD(15);
</script>
    </body>
    </html>

OR

<html>
    <head>
    </head>
    <body>
<script>

window.onload = function() {
  function toD(angle) {
    return angle * (180 / Math.PI);
  }
  var a = document.getElementById('test').innerHTML = toD(15);
}
</script>

<p id='test'> </p>

    </body>
    </html>

注意:这是一种使用window.onload的非常脏的方式,只有在这是要求onload的页面上的唯一脚本时才应使用。{1}}。有关在使用多个脚本时正确使用onload的详情,请参阅How to Use window.onload the Right Way

答案 1 :(得分:4)

您需要等到文档加载,因为您在浏览器完全解析HTML之前尝试访问元素(#test) - 您可以使用window.onload以便JS在文档加载后运行 - 例如

window.onload = 

// JS

答案 2 :(得分:2)

查看JavaScript控制台[f12],您将看到一条错误消息:

  

未捕获的TypeError:无法设置null

的属性'innerHTML'

发生错误是因为您在将元素呈现到页面之前引用该元素。

将script标记放在元素后面,以便它可以找到元素。

<html>
    <head>
    </head>
    <body>

    <p id='test'> </p>

    <script>

        function toD(angle) {
          return angle * (180 / Math.PI);
        }
        var a = document.getElementById('test').innerHTML = toD(15);
    </script>


    </body>
</html>

答案 3 :(得分:1)

因为当您运行document.getElementById('test')时,尚未呈现DOM对象<p id='test'> </p>

答案 4 :(得分:0)

将脚本放在页面底部以避免上述问题,也可以使用windows.onload http://www.w3schools.com/jsref/event_onload.asp - 确保元素在投射之前呈现。

答案 5 :(得分:0)

渲染中的问题 更改您的代码如下:

<html>
   <body>
       <p id='test'> </p>

    <script language="javascript">

       function toD(angle) {
         return angle * (180 / Math.PI);
       }
      var a = document.getElementById('test').innerHTML = toD(15);
    </script>


   </body>
  </html>

- &GT;请阅读有关如何解析网页的信息。您将清楚自己在页面中编写脚本的位置。

- &gt;对象应在对其执行操作之前呈现。你的代码div中没有​​渲染,你试图对它进行操作(即document.getElementById('test')。innerHTML = toD(15);)