我的代码给出了一条错误消息:GetElementById() 为空或不是对象
2012-08-02
157
我有这个 js 代码:
var id = document.getElementById("myDiv").getAttribute("data-id");
et="Your Message Here";
el="http://x2.xclicks.net/sc/out.php?s="+id+""
sl=new Array();
sn=new Array();
a="</a>"; af="<a target='_blank'";
function dw(n) {document.write(n,"\n");}
function showLink(n,s,b){
if(!s) {s='anc'}
if(!b) {b=''}
else {b="&b="+b}
ast = af+" class='"+s+"' href='"+el;
n = n-1;
if(sl[n]&&sl[n]!="") {
dw(ast+"&o="+sl[n]+b+"'>"+sn[n]+a)
} else {
dw(ast+b+"'>"+et+a)
}
}
我像这样加载到我的 header.php 中:
<script type="text/javascript" src="<? bloginfo('template_url'); ?>/js/trf.js"></script>
问题是,虽然这是正确的:
var id = document.getElementById("myDiv").getAttribute("data-id");
我收到此错误:
getElementById() 为空或不是对象
Ady Ideas 为什么?
我需要声明文档已准备好还是其他什么吗?
3个回答
Do I need to declare a document ready or something?
是的,完全正确。在文档准备好之前(即所有标签都解析为 DOM 元素),您将无法通过 id 获取元素。这仅适用于脚本标签上方的元素,这些元素已经解析。将脚本包含从
<head>
移到
</body>
结束之前会有所帮助。或者,您需要使用各种
DOMContentLoaded
或
onload
事件之一,不幸的是,这些事件不支持跨浏览器。我建议搜索一个好的代码片段或使用库。
Bergi
2012-08-02
假设您正在文档的
<head>
中加载该脚本,当该元素尚未加载到 DOM 中时,您会尝试通过 ID 获取该元素。
您需要等待文档准备就绪(通过
onDOMContentLoaded
、
window.onload
或任何其他延迟到渲染完成的方式)才能通过 ID 访问该元素。
ajm
2012-08-02
我会尝试将其包装在
$(document).ready
中。您很可能只是在 DOM 准备就绪之前尝试访问它
Phillip Schmidt
2012-08-02