关于javascript:为什么这个简单的代码不会运行?

Why won't this simple code run?

本问题已经有最佳答案,请猛点这里访问。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<html>
    <head>
    </head>
    <body>



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


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

    </body>
    </html>

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


在脚本中运行var a = document.getElementById('test').innerHTML = toD(15);时,

不存在。

将脚本放在AFTER

之后,或将整个脚本包装在自己的函数中,并将其分配给onload,这样它只能在

之后运行,并且其余的DOM都可用。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<html>
    <head>
    </head>
    <body>

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


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

    </body>
    </html>

要么

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<html>
    <head>
    </head>
    <body>


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


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

    </body>
    </html>

注意:这是一种非常脏的使用window.onload的方法,只有在这是要求onload的页面上的唯一脚本时才应该使用。有关在使用多个脚本时正确使用onload的更多信息,请阅读如何使用window.onload正确的方法


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

1
2
3
window.onload =

// JS


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

Uncaught TypeError: Cannot set property 'innerHTML' of null

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

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<html>
    <head>
    </head>
    <body>

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

   

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


    </body>
</html>

因为当您运行document.getElementById('test')时,DOM对象

尚未呈现。


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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<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);
   


   </body>
  </html>

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

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


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