1
<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>

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

4

6 回答 6

9

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

将脚本放在 AFTER 之后<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>

或者

<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. 更多onload脚本在多个脚本使用时如何正确使用,请阅读如何正确window.onload使用

于 2013-08-12T12:59:46.050 回答
4

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

window.onload = 

// JS
于 2013-08-12T13:00:06.800 回答
2

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

未捕获的类型错误:无法将属性“innerHTML”设置为 null

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

将脚本标签放在元素之后,以便它可以找到该元素。

<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>
于 2013-08-12T12:59:57.867 回答
1

因为当你运行document.getElementById('test')DOM 对象时还<p id='test'> </p>没有渲染。

于 2013-08-12T13:00:52.283 回答
0

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

于 2013-08-12T13:01:32.470 回答
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>

-> 请阅读网页是如何解析的。您将清楚地了解在页面中的何处编写脚本。

-> 对象应在对其执行操作之前呈现。在您的代码中 div 未呈现,您尝试对其执行操作(即 document.getElementById('test').innerHTML = toD(15); )

于 2013-08-12T13:01:32.950 回答