JavaScript TypeError:无法读取 null 的属性“style”
我有 JavaScript 代码,但下面这一行有问题。
if ((hr==20)) document.write("Good Night"); document.getElementById('Night).style.display=''
错误
Uncaught TypeError: Cannot read property 'style' of null at Column 69
我的 div 标签详细信息是:
<div id="Night" style="display: none;">
<img src="Img/night.png" style="position: fixed; top: 0px; left: 5%; height: auto; width: 100%; z-index: -2147483640;">
<img src="Img/moon.gif" style="position: fixed; top: 0px; left: 5%; height: 100%; width: auto; z-index: -2147483639;"></div>
完整的 JavaScript:
<script language="JavaScript">
<!--
document.write("<dl><dd>")
day = new Date()
hr = day.getHours()
if ((hr==1)||(hr==2)||(hr==3)||(hr==4) || (hr==5)) document.write("Should not you be sleeping?")
if ((hr==6) || (hr==7) || (hr==8) || (hr==9) || (hr==10) || (hr==11)) document.write("Good Morning!")
if ((hr==12)) document.write("Let's have lunch?")
if ((hr==13) || (hr==14) || (hr==15) || (hr==16) || (hr==17)) document.write("Good afternoon!")
if ((hr==18) || (hr==19)) document.write("Good late afternoon!")
if ((hr==20)) document.write("Good Night"); document.getElementById('Night').style.display=''
if ((hr==21)) document.write("Good Night"); document.getElementById('Night').style.display='none'
if ((hr==22)) document.write("Good Night")
if (hr==23) document.write("Oh My! It's almost midnight!")
if (hr==0) document.write("Midnight!<br>It is already tomorrow!") document.write("</dl>")
//--->
</script>
有人能帮我吗?
在您的脚本中,此部分:
document.getElementById('Noite')
必须返回
null
,并且您还试图将
display
属性设置为无效值。有几个可能的原因导致第一部分为
null
。
-
您在文档加载之前过早运行脚本,因此无法找到
Noite
项。 -
您的 HTML 中没有
Noite
项。
我应该指出,您在这种情况下使用
document.write()
代码可能表示存在问题。如果文档已经加载,那么新的
document.write()
将清除旧内容并启动一个新文档,因此不会找到任何
Noite
项。
如果您的文档尚未加载,因此您正在执行
document.write()
内联以将 HTML 内联添加到当前文档,那么您的文档尚未完全加载,所以这可能是它找不到
Noite
项的原因。
解决方案可能是将脚本的这一部分放在文档的最末尾,以便之前的所有内容都已加载。因此,请将其移至正文末尾:
document.getElementById('Noite').style.display='block';
此外,请确保在文档加载后,javascript 中没有
document.write()
语句(因为它们将清除前一个文档并启动一个新文档)。
此外,将
display
属性设置为
"display"
对我来说毫无意义。有效的选项包括
"block"
、
"inline"
、
"none"
、
"table"
等...我不知道该样式属性有任何名为
"display"
的选项。请参阅
此处
,了解
display
属性的有效选项。
您可以在此演示中看到修复后的代码: http://jsfiddle.net/jfriend00/yVJY4/ 。该 jsFiddle 配置为将 javascript 放置在文档主体的末尾,以便它在文档加载后运行。
附言。我应该指出,您的
if
语句缺少括号,并且在同一行中包含多个语句,这使得您的代码非常具有误导性且不清楚。
我很难弄清楚您在问什么,但是这里有一个可以工作的清理过的代码版本,您也可以在这里看到它: http://jsfiddle.net/jfriend00/QCxwr/ 。以下是我所做的更改列表:
- 脚本位于正文中,但位于其引用的内容之后。
-
我已将
var
声明添加到您的变量中(这是一个始终要使用的好习惯)。 -
将
if
语句更改为 if/else,这样效率更高,并且更能自我记录您正在做的事情。 -
我为每个
if
语句添加了括号,因此可以非常清楚地知道哪些语句是if/else
的一部分,哪些不是。 -
我已正确关闭您插入的
</dd>
标签。 -
我已将
style.display = '';
更改为style.display = 'block';
。 - 我在每个语句的末尾都添加了分号(另一个值得遵循的好习惯)。
代码:
<div id="Night" style="display: none;">
<img src="Img/night.png" style="position: fixed; top: 0px; left: 5%; height: auto; width: 100%; z-index: -2147483640;">
<img src="Img/moon.gif" style="position: fixed; top: 0px; left: 5%; height: 100%; width: auto; z-index: -2147483639;">
</div>
<script>
document.write("<dl><dd>");
var day = new Date();
var hr = day.getHours();
if (hr == 0) {
document.write("Meia-noite!<br>Já é amanhã!");
} else if (hr <=5 ) {
document.write(" Você não<br> devia<br> estar<br>dormindo?");
} else if (hr <= 11) {
document.write("Bom dia!");
} else if (hr == 12) {
document.write(" Vamos<br> almoçar?");
} else if (hr <= 17) {
document.write("Boa Tarde");
} else if (hr <= 19) {
document.write(" Bom final<br> de tarde!");
} else if (hr == 20) {
document.write(" Boa Noite");
document.getElementById('Noite').style.display='block';
} else if (hr == 21) {
document.write(" Boa Noite");
document.getElementById('Noite').style.display='none';
} else if (hr == 22) {
document.write(" Boa Noite");
} else if (hr == 23) {
document.write("Ó Meu! Já é quase meia-noite!");
}
document.write("</dl></dd>");
</script>
发生这种情况的原因是
document.write
会覆盖您现有的代码,因此请将您的
div
放在您的 javascript 代码之前。例如:
CSS:
#mydiv {
visibility:hidden;
}
在您的 html 文件中
<div id="mydiv">
<p>Hello world</p>
</div>
<script type="text/javascript">
document.getElementById('mydiv').style.visibility='visible';
</script>
希望这对您有帮助
简单来说,我认为你的代码中缺少一个单引号
if ((hr==20)) document.write("Good Night"); document.getElementById('Night"here").style.display=''
应该是这样的
if ((hr==20)) document.write("Good Night"); document.getElementById('Night').style.display=''