PTT
Submit
Submit
选择语言
正體中文
简体中文
PTT
Web_Design
[问题] .hover 与循环?
楼主:
skipeco
(skipeco)
2014-04-22 12:35:41
最近用jQuery1.10,希望设计成鼠标滑过相应的主选单,子选单就会展开
五个主选单id: MENU1 ~ MENU5
五个子选单id: SUB1 ~ SUB5
原本写成:
$("#MENU1").hover(
function(){
$("#SUB1").slideDown(800);
},function(){
$("#SUB1").slideUp(300);
});
.
.
.
.
$("#MENU5").hover(
function(){
$("#SUB5").slideDown(800);
},function(){
$("#SUB5").slideUp(300);
});
为了希望精简而改成循环,却发现下面这个方法不行
for(var i = 1; i < 6; i++){
$("#MENU"+i).hover(
function(){
alert(i);
$("#SUB"+i).slideDown(800);
},function(){
$("#SUB"+i).slideUp(300);
});
}
我后来以查到可行的写法(内部两个function "#SUB"+变量 要改用 this.id.substr(4)
控制),但仍想请教:
1. 为何明明同样包在循环之内,内部两个function用 i 却无法正确执行?
其原理为何?
2. 在内部function 增设一alert(i)观察,却发现其 i 值是"6"!
甚至超过循环的上限,这又是为何?
有劳各位先进了,谢谢 m(_ _)m
作者:
mmis1000
(秋月恋枫)
2014-04-22 12:53:00
因为closure的关系他们的i都是同一个,修改时当然全部都变了
http://jsfiddle.net/ZpzbS/
所以要这样做这是少数js中,不是传值而是传参照的状况,满有名的陷阱至于为何是6,这要从for循环的构造看基本上for循环就是 while循环的语法糖,可以这样展开
http://jsfiddle.net/fcPQ7/
可以看出,退出循环时,i的值是6
作者:
harry1123
(海贼王)
2014-04-22 19:42:00
感谢mm大大!! 刚还在想为啥是6,忘了基本for循环特性OTZ
楼主:
skipeco
(skipeco)
2014-04-22 23:01:00
感谢m大! 后来找到一篇资料,也刚好几乎是在讲这问题
http://goo.gl/27YmRc
确实是因为内层神奇地一直能存取外层最新数据造成的m大的传址 和 jsfiddle上的解法真的很精准!
作者:
mmis1000
(秋月恋枫)
2014-04-22 23:26:00
另外function的参数,其实相当于自动var一个变量,再存入外部数据
继续阅读
[情报] 做 loading 图的好工具
foobar
[请益] PHP 表单送出后收到mail有时会空白
binggo
[问题] 背景mp4播放
dreamerXYZ
[问题] wordpress如何取消隐藏版面
tpdfes12000
[问题] 动态网页设计 指令码问题
a85222781
[问题] Google charts org chart 显示中文
saponevol23
[问题] 如何移除/更改登陆在 YAHOO 的网站
ashaly
[问题] 请问有人知道“线上产生器”要怎么做吗
creamybutter
[问题] 裁切图片有办法JS做完吗?
qazwsx9006
Re: [问题] AngularJs 和 rails
ducksteven
Links
booklink
Contact Us: admin [ a t ] ucptt.com