2013-12-16 230 views
0
我在这里过这段代码

的,我敢肯定,我通过正确的名字,但它仍然表示为空:无法读取属性“...”空

var w = window.innerWidth; 
var h = window.innerHeight; 
var inj = document.getElementById("sterile").innerHTML; 

function inject(data) { 
    document.getElementById("sterile").innerHTML+=data; 
} 

function geth(elem) { 
    return document.getElementById(elem).clientHeight; 
} 

inject(".fullscreen { height:"+h+"px;}"); 

inject(".headpad {padding-top:"+h-(geth("headwrap")/2)+"px;}"); 

我试着键入geth("sterile")到Chrome的devconsole并返回正常,但是当我推出这个通过文件我总是Uncaught TypeError....

错误行是10

+5

在页面上可能没有元素“id”“headwrap”。因此'getElementById()'返回'null'。 – Pointy

+0

有!我试着在控制台中输入geth(“headwrap”),它工作得很好。 – potasmic

+0

从@Pointy继续,如果您可以发布您的HTML,如果它长时间使用pastebin? –

回答

2

假设你包括在头标记你的JavaScript,尝试包括它就在</body>标签之前来代替。这可以确保浏览器在解析JavaScript时知道所有元素。

+0

哦天哪我只是忘了这个!谢谢...应该包括这个到onload而不是 – potasmic

+1

这会做到这一点:) - 但如果你只是简单地包含在页面的末尾,你将不需要一个onload事件处理程序,它会尽快触发可能。没有延迟的图像等 –

+0

不要忘记接受答案,如果这样做对你:) –

1

如果你想搞乱DOM,你应该先等待它做好准备。做这样的一个方法是:

window.addEventListener("DOMContentLoaded", function() { 
    // Your logic here 
}, false); 

使用addEventListener也是Unobstrusive的Javascript技术,这是一种方式很好的做法。您会自动获得将代码封装在闭包中的优势。