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> |
对不起,我不确定我是否遗漏了什么,但为什么这段代码没有运行? 提前谢谢,对不起,如果这是一个愚蠢的问题!
在脚本中运行
不存在。
将脚本放在AFTER
之后,或将整个脚本包装在自己的函数中,并将其分配给
之后运行,并且其余的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> |
注意:这是一种非常脏的使用
您需要等到文档加载,因为您在浏览器完全解析HTML之前尝试访问元素(
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> |
因为当您运行
尚未呈现。
渲染中的问题
更改您的代码如下:
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 - 确保元素在投射之前呈现。