开发者问题收集

我的代码给出了一条错误消息: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> 结束之前会有所帮助。或者,您需要使用各种 DOMContentLoadedonload 事件之一,不幸的是,这些事件不支持跨浏览器。我建议搜索一个好的代码片段或使用库。

Bergi
2012-08-02

假设您正在文档的 <head> 中加载该脚本,当该元素尚未加载到 DOM 中时,您会尝试通过 ID 获取该元素。

您需要等待文档准备就绪(通过 onDOMContentLoadedwindow.onload 或任何其他延迟到渲染完成的方式)才能通过 ID 访问该元素。

ajm
2012-08-02

我会尝试将其包装在 $(document).ready 中。您很可能只是在 DOM 准备就绪之前尝试访问它

Phillip Schmidt
2012-08-02