window.onload的位置什么讲究

春花秋月灬相伴 2017-05-04 10:30:03
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>选项卡</title>
<style type="text/css">
div{
width: 210px;
height: 210px;
background: #CCC;
}
.liang{background: yellow;}
</style>
<script type="text/javascript">
var arr=["李","明","最","帅!"];
var i=0;
var temp='';
var oBtn=document.getElementsByTagName('input');
function show(){//制作定时器执行的函数
var oDiv=document.getElementById('div1');
for (var j=0;j<oBtn.length;j++)
{
oBtn[j].className='';
};
oBtn[i].className='liang';
oDiv.innerHTML=arr[i++];
if(i==oBtn.length)
i=0;
};
window.onload=function(){ //把这句放在最前面,却会错,为什么
var oDiv=document.getElementById('div1');
for (var i=0;i<oBtn.length;i++)
{
oBtn[i].index=i;
oBtn[i].onmouseover=function (){
clearInterval(temp);
for (var j=0;j<oBtn.length;j++)
{
oBtn[j].className='';
}
this.className='liang';
oDiv.innerHTML=arr[this.index];
}
oBtn[i].onmouseout=function(){
temp=setInterval(show,1000);
}
};
clearInterval(temp);//调用之前先关掉,否则累加
temp=setInterval(show,1000);
show();
};
</script>

</head>
<body>
<input type="button" id="" value="按钮1" />
<input type="button" id="" value="按钮2" />
<input type="button" id="" value="按钮3" />
<input type="button" id="" value="按钮4" />
<div id="div1">李</div>

</body>
</html>
把window.onload放在最前面,却会错,为什么
...全文
521 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
天际的海浪 2017-05-09
  • 打赏
  • 举报
回复
引用 6 楼 qq_38300174 的回复:
还是不懂,window.onload用法一直困扰着我这个萌新

代码简化一下好理解
var i = 0;//这个i是全局变量
setTimeout(function () {
	alert(i);//输出全局变量i的值:0
}, 2000);

window.onload = function () {
	for (var i = 0; i < 4; i++) {//这个i是局部变量,与上边的i不是同一个变量
		
	}
	//循环之后局部变量i的值是4,但全局变量i的值还是0
}

----------------------------------------------
把window.onload放在最前面

window.onload = function () {
	var i = 0;//这个i就也是局部变量了
	setTimeout(function () {
		alert(i);//输出变量i的值:4
	}, 2000);

	for (var i = 0; i < 4; i++) {//这个i与上边的i都是同一个函数中的局部变量,是同一个变量
		
	}
	//循环之后i的值是4
}

qq_38217785 2017-05-09
  • 打赏
  • 举报
回复
这么跟你说吧,window.onload=function(){这里面的内容就会在网页加载完自动执行,因为onload也是一个事件,同onclick一样},如果你把JS代码写在文档的最后面,这样是没有问题的,如果写在head里面,浏览器加载文档是从上到下解析的,head里面的JS如果有document.getElementById()这样的内容会报错,因为这时候文档内容还没有加载,所以要在外面加一个window.onload。
  • 打赏
  • 举报
回复
还是不懂,window.onload用法一直困扰着我这个萌新
  • 打赏
  • 举报
回复
不是太懂,能仔细讲讲吗
天际的海浪 2017-05-06
  • 打赏
  • 举报
回复
引用 4 楼 qq_38300174 的回复:
不是太懂,能仔细讲讲吗
你把一开始的i变量改个名就可以了
Msxindl_Com 2017-05-05
  • 打赏
  • 举报
回复
另外:由于你的JS代码是写在页面内容的前面,所以 oBtn 应该在 onload 中赋值。
happy002 2017-05-05
  • 打赏
  • 举报
回复
放在最前面oBtn未定义
天际的海浪 2017-05-04
  • 打赏
  • 举报
回复
window.onload=function(){把这句放在最前面, 一开始var i=0;定义的i变量就和后面循环中的i变量处于同一函数中了,被认作同一个变量,冲突了

87,993

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧