DOM 元素引用为空 - 未捕获 TypeError:无法读取为空的属性“style”
2014-01-19
8704
我正在开发一个灵活的菜单,单击“链接”时无需在各个页面之间跳转。 我为此使用的 JavaScript 如下:
var inbox = document.getElementById("u-content-inbox");
var friends = document.getElementById("u-content-friends");
var agenda = document.getElementById("u-content-agenda");
var list = document.getElementById("u-content-list");
var news = document.getElementById("u-content-news");
var notes = document.getElementById("u-content-notes");
function Inbox() {
inbox.style.visibility='visible';
}
function Friends() {
friends.style.visibility='visible';
}
function Agenda() {
agenda.style.visibility='visible';
}
function List() {
list.style.visibility='visible';
}
function News() {
news.style.visibility='visible';
}
function Notes() {
notes.style.visibility='visible';
}
div 元素如下:
<div id="u-content-inbox" style="visibility:hidden;">
Inbox
</div>
<div id="u-content-friends" style="visibility:hidden;">
Friends
</div>
每个 div 都有一个“u-content-x”。
但是,当我尝试将样式属性“visibility”更改为visible时。它给出了以下错误:
Uncaught TypeError:无法读取 null 的属性“style”
我没有看到我做错了什么。有人可以帮我解释一下为什么 JavaScript,或者说我无法让它工作吗? 每当我运行检查时
if(!inbox) {
alert("Inbox div has not been found);
}
都不会显示警报消息。
1个回答
确保在文档加载后调用 javascript!我几乎可以肯定,您正在尝试在元素引用存在于 dom 中之前获取它们。最佳做法是将所有脚本放在 body 标签结束之前。
<script src="some/path/to/file.js"></script>
</body>
如果您的脚本在元素之前出现在文档中,您可以将代码放在此加载事件函数中:
window.addEventListener('load', function() {
//your code here
});
作为代码架构的注释,您可以将一个类附加到每个元素,然后执行以下操作:
var toMakeVisible = document.getElementsByClassName('some-class');
for (var i=0; i<toMakeVisible; ++i) {
var elem = toMakeVisible[i];
elem.style.visibility = 'visible';
}
m59
2014-01-19