关于js的一个小问题,哪位牛人帮我看看,我是新手 $(document).ready(function(){ for(var i = 0;i<3;i++){ $(".haha0").mouseover(function(){ alert(i); }) } })i为什么一直是3呢JavaScript函数 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 因为你for循环时,i是先加1,变成3,然后去判断i<3,虽然$(".haha0").mouseover(function(){..不会执行了,但alert(i)里的i已经是3了 这是js中的闭包,你可以看一下《javascript语言精粹》上的解释,原因是你的mouseover事件函数中引用了ready事件中的变量i,但调用mouseover事件的时候,i已经循环完了,所以i就是3 我尝试解释一下吧,你的代码如下:$(document).ready(function(){//jquery版的window.onloadfor(var i = 0;i<3;i++){//循环,其中i 函数定义在匿名函数中,在整个匿名函数中可见且唯一$(".haha0").mouseover(function(){//嵌套函数alert(i);//i为var i,注意在外面for循环过程中i是变化的。})}})所以你的i都是3,因为for循环执行完i就是3,退出匿名函数时也是3.正确做法使用闭包:$(document).ready( function() { var i; for(i = 0;i<3;i++) { (function(x) { var id="#div"+(x+1); $(id).click(function(){ alert(x); }); }(i)); }});<div id="div1">div1</div><div id="div2">div2</div><div id="div3">div3</div>使用闭包,至于闭包的具体信息,请自己查阅,才能记忆和理解得更牢。 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><title>Untitled Document</title><script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script></head><body><div id="divId1">fsf</div><div id="divId2">fsffffffff</div><div id="divId3">fsffffffffffff</div><script type="text/javascript">for(var i=0; i<3; i++) { document.getElementById('divId' + (i + 1)).onclick = function(j) { return function() { alert(j); }; }(i); }</script></body></html> for循环作用域问题 求助 关于url拼接的实现 急!!谁能给一段英文google地图的代码? JavaScript 字符串问题 请问一个和firefox有关的问题 怎么通过Id得到一个表格的头标签? 各位,我用javascript写了树状菜单,大侠帮我改下 绝对请大虾进来看看--为什么我的XP无法弹出广告窗口? 求助:请大家帮我找一下这样的收放式菜单代码。 怎么用JAVA语言在从下面的字符串中取得想要的字符串 如何实现,鼠标单击选中,在此单击取消选中? easyui初始渲染异常 全选Check box的问题~~~~~急急急
$(document).ready(function(){//jquery版的window.onload
for(var i = 0;i<3;i++){//循环,其中i 函数定义在匿名函数中,在整个匿名函数中可见且唯一
$(".haha0").mouseover(function(){//嵌套函数
alert(i);//i为var i,注意在外面for循环过程中i是变化的。
})
}
})
所以你的i都是3,因为for循环执行完i就是3,退出匿名函数时也是3.正确做法使用闭包:
$(document).ready( function() {
var i;
for(i = 0;i<3;i++) {
(function(x) {
var id="#div"+(x+1);
$(id).click(function(){
alert(x);
});
}(i));
}
});
<div id="div1">div1</div>
<div id="div2">div2</div>
<div id="div3">div3</div>
使用闭包,至于闭包的具体信息,请自己查阅,才能记忆和理解得更牢。
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
</head><body>
<div id="divId1">fsf</div>
<div id="divId2">fsffffffff</div>
<div id="divId3">fsffffffffffff</div>
<script type="text/javascript">
for(var i=0; i<3; i++) {
document.getElementById('divId' + (i + 1)).onclick = function(j) {
return function() {
alert(j);
};
}(i);
}
</script>
</body>
</html>