onload 与 动态添加DOM元素

<script>window.onload=function(){func1();func2();}functionfunc1(){for(vari=0;i<20;i++... <script >
window.onload=function(){
func1();
func2();
}
function func1()
{
for(var i=0;i<20;i++)
{
li=document.createElement("li");
li.innerHTML= i;
document.getElementById("ul").appendChild(li);
}
}
function func2(){
alert("123");
}
</script>
</head>
<body>
<ul id = "ul">
</ul>
</body>

第一问:func1 为什么只有在onload调用时能执行 ,不能放下面自然执行?
第二问:func2 为什么会比fun1 先执行。
第三问: 采用哪种方法可以让 fun2 在fun1执行完之后 自动执行。
展开
 我来答
网海1书生
科技发烧友

2018-11-12 · 擅长软件设计、WEB应用开发、小程序
网海1书生
采纳数:12315 获赞数:26235

向TA提问 私信TA
展开全部

1、func1中涉及到了页面dom元素的操作,如果不放在onload事件中而是直接运行,那么这时候页面的dom元素(比如ul)极可能尚未加载到内存,会造成操作失败。放在onload中,则可百分百保证整个页面的dom结构都已加载到内存,这样就能保证运行成功了。

2、alert()是系统级的模态提示框,它在显示的时候,整个脚本都会暂停运行(或者叫“挂起”),关闭提示框后才会继续运行。也就是说,表面上看func2是比func1先运行的,但其实func1确实是先运行的,但即使电脑的运行速度再快,运行总是要花时间的,而就在func1努力运行但尚未显示出结果时,func2的alert已经弹出来并把整个脚本暂停了,这样func1就僵在那了,看起来就好像是它还没运行一样。

3、没有完美的解决办法,要么你可以自建一个非模态的提示框,要么可以采用延时执行的方式,比如:

window.onload=function(){
    func1();
    setTimeout(func2,100);
}
heart阿飞55
2018-11-12 · TA获得超过1086个赞
知道大有可为答主
回答量:3030
采纳率:82%
帮助的人:580万
展开全部
你在js中定义的是inset,在butto写的是insert,字母都拼错了
下面是我修改的代码,去掉了一些不必要的东西,Window.onload不要乱用,只需要定义一个function,在元素里面调用就行了。。
!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<script type="text/javascript">
function inset()
{
console.log("ok");
}
</script>
</head>
<body>
<button onclick="inset()">test</button>
</body>
</html>
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式