今天早上出现了一个问题,同一个function在页面最下面调用和用onload调用结果不一样,在onload中调用会报错,我的经验一直告诉我,这两种方式是一样的,可以互用,但是为什么会报错呢,百思不得其解,于是上网搜索了一些资料。
开始看到网上的一篇评论,说是onload可能在js没有全部引完就会执行,开始我还真以为是这个原因,或来经过测试,和继续查资料发现onload应该是全部js加载完(不包括css)才执行的,开始那片文章误导了我,最后经过测试找到了原因,因为函数里面用了"document.write('....')"语句,当在页面调用时,会在函数位置写下括号里的语句,但是如果在onload里面写,就会覆盖整个页面,即整个页面只剩下括号内容了(...),解决的办法是取得head对象创建文本对象,head.appendChild(document.createTextNode("...."))。
b.js:[下载]
alert("5");
a.js:[下载]
alert("4");
document.write("<script src=b.js></scr"+"ipt>");
alert("6");
test.html:[下载]
<script src=a.js></script>
<script>
alert("1");
document.write("<script src=b.js></scr"+"ipt>");
document.write("<script>alert("3")</scr"+"ipt>");
alert("2");
</script>
执行test.html,可以看到打印的顺序是:4,6,5,1,3,2,5
得出的结论是:
1.同级的不同的代码块,代码块间的执行顺序为从上到下;
2.在代码中嵌入代码的情况下,先执行上层代码块,再执行子代码块;代码中嵌入代码是指一个文件引入另一个文件,而不是指所有的通过document.write形式打出的代码。
追加事件,比如一个onload执行多个函数
http://benlee.tw/blog/?p=222
if (window.addEventListener){
window.addEventListener('load', method, false);
}else if (window.attachEvent){
window.attachEvent('onload', method);
}
在页面中的javascript,要在网页完全加载完毕后执行,要在script标签中加defer.
<script defer type="text/javascript">
function method(){
alert('');
}
</script>