下面这个ul,如何点击每一列的时候alert其index。这样做为什么不对?

zl_dream1106 2013-06-22 11:08:00

<ul id= "test">
<li>这是第一条</li>
<li>这是第二条</li>
<li>这是第三条</li>
</ul>


(function getIndex(){
var ul = document.getElementById("test");
var li = ul.getElementsByTagName("li");


for(var i=0, l = li.length ; i<l; i++){

/* 正确做法
li[i].onclick =( function(x){
return function(){
alert(x);
}
})(i);
*/

//为什么这种做法会在页面打开时,
//在未点击的情况下会立即弹出alert内容?(0 1 2)
li[i].onclick = (function(num){
return alert(num);
})(i);
}
})();

...全文
295 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
阿鱼 2013-06-26
  • 打赏
  • 举报
回复
1楼正解。 正确的里面:onclick=函数 错误的里面:onclick=匿名函数(立即)执行后返回的值
zl_dream1106 2013-06-22
  • 打赏
  • 举报
回复
引用 1 楼 showbo 的回复:
直接执行了匿名函数,然后匿名函数返回alert的返回值。。 正确的是返回了函数对象
试了一下,在正确的代码里让内部的function立即执行的确是同样的效果。 但是,立即执行是指无论是不是click,只要进入代码段,都会直接执行么?而不考虑是否click事件发生?
  • 打赏
  • 举报
回复
直接执行了匿名函数,然后匿名函数返回alert的返回值。。 正确的是返回了函数对象
原来缘来 2013-06-22
  • 打赏
  • 举报
回复
引用 楼主 zl_dream1106 的回复:

	<ul id= "test">
		<li>这是第一条</li>
		<li>这是第二条</li>
		<li>这是第三条</li>
	</ul>
    
(function getIndex(){
			var ul = document.getElementById("test");
			var li = ul.getElementsByTagName("li");		
                        
                        
			for(var i=0, l = li.length ; i<l; i++){

                        /* 正确做法
				li[i].onclick =( function(x){
					return function(){
						alert(x);
					}
				})(i);
                        */
                        
                         //为什么这种做法会在页面打开时,
                         //在未点击的情况下会立即弹出alert内容?(0 1 2)
				li[i].onclick = (function(num){
					return alert(num);
				})(i);
			}
		})();

      /* 正确做法
				li[i].onclick =function(){
						alert(1);
					}
				};
                        */
      /* 楼主不明白的
				li[i].onclick =(function(){
						alert(1);
					})()
				};
                        */
楼主明白了吗
  • 打赏
  • 举报
回复
引用 2 楼 zl_dream1106 的回复:
[quote=引用 1 楼 showbo 的回复:] 直接执行了匿名函数,然后匿名函数返回alert的返回值。。 正确的是返回了函数对象
试了一下,在正确的代码里让内部的function立即执行的确是同样的效果。 但是,立即执行是指无论是不是click,只要进入代码段,都会直接执行么?而不考虑是否click事件发生?[/quote] 仔细看下2个代码的区别,第一个是执行匿名函数返回函数作为click事件,第二执行匿名函数,匿名函数中再执行alert语句,将alert语句的返回值作为click事件。

87,992

社区成员

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

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