开发者问题收集

JavaScript TypeError:无法读取 null 的属性“style”

2013-10-07
607833

我有 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>

有人能帮我吗?

3个回答

在您的脚本中,此部分:

document.getElementById('Noite')

必须返回 null ,并且您还试图将 display 属性设置为无效值。有几个可能的原因导致第一部分为 null

  1. 您在文档加载之前过早运行脚本,因此无法找到 Noite 项。

  2. 您的 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/ 。以下是我所做的更改列表:

  1. 脚本位于正文中,但位于其引用的内容之后。
  2. 我已将 var 声明添加到您的变量中(这是一个始终要使用的好习惯)。
  3. if 语句更改为 if/else,这样效率更高,并且更能自我记录您正在做的事情。
  4. 我为每个 if 语句添加了括号,因此可以非常清楚地知道哪些语句是 if/else 的一部分,哪些不是。
  5. 我已正确关闭您插入的 </dd> 标签。
  6. 我已将 style.display = ''; 更改为 style.display = 'block';
  7. 我在每个语句的末尾都添加了分号(另一个值得遵循的好习惯)。

代码:

<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("&nbsp;&nbsp;Você não<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;devia<br>&nbsp;&nbsp;&nbsp;&nbsp;estar<br>dormindo?");
} else if (hr <= 11) {         
    document.write("Bom dia!");
} else if (hr == 12) {
    document.write("&nbsp;&nbsp;&nbsp;&nbsp;Vamos<br>&nbsp;almoçar?");
} else if (hr <= 17) {
    document.write("Boa Tarde");
} else if (hr <= 19) {
    document.write("&nbsp;Bom final<br>&nbsp;de tarde!");
} else if (hr == 20) {
    document.write("&nbsp;Boa Noite"); 
    document.getElementById('Noite').style.display='block';
} else if (hr == 21) {
    document.write("&nbsp;Boa Noite"); 
    document.getElementById('Noite').style.display='none';
} else if (hr == 22) {
    document.write("&nbsp;Boa Noite");
} else if (hr == 23) {
    document.write("Ó Meu! Já é quase meia-noite!");
}
document.write("</dl></dd>");
</script>
jfriend00
2013-10-07

发生这种情况的原因是 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>

希望这对您有帮助

jfindley
2016-04-29

简单来说,我认为你的代码中缺少一个单引号

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=''
Ahmed Al Dini
2019-05-02