循环注册事件的几种写法
2017-04-29 19:05
267 查看
<body> <ul> <li>0</li> <li>1</li> <li>2</li> </ul> <script> var node = document.querySelectorAll('ul li') for(var i = 0;i<node.length;i++){ node[i].addEventListener('click',function(){ alert('click'+i) }) } </script> </body>
上面的写法得到的结果都是终值3。
有几种写法可以得到期望的值:
1.闭包
var node = document.querySelectorAll('ul li') for(var i = 0;i<node.length;i++){ (function(i){ node[i].addEventListener('click',function(){ alert('click'+i) }) })(i) }
2.forEach(形成匿名闭包)
var node = document.querySelectorAll('ul li') Array.from(node).forEach(function(nodeItem,index){ nodeItem.addEventListener('click',function(){ alert('click'+index) }) })
3.let(形成匿名闭包)
var node = document.querySelectorAll('ul li') for(let i = 0;i<node.length;i++){ node[i].addEventListener('click',function(){ alert('click'+i) }) }
4.bind方法
var node = document.querySelectorAll('ul li') for(var i = 0;i<node.length;i++){ node[i].addEventListener('click',function(i){ alert('click'+i) }.bind(null,i)) }
相关文章推荐
- 2.0Tip/Trick之MessageBox, Popup, 循环的几种实现方法, 动态变换主题, 本地化(多语言), 响应鼠标双击事件
- 整理最近新学到的几种sql写法(一)动态“循环”更新表内数据
- for循环的几种写法(变化)
- libevent (三) 事件注册与循环监听
- Android 漫游之路------Android电话拨号器(点击事件的几种写法)、Android短信发送器
- AJAX循环注册客户端事件!
- 循环绑定事件的两种常用闭包写法(备忘)
- SWT中Button事件的几种不同写法
- mono touch种注册事件几种方式
- PHP 中判断、循环的几种写法
- 注册 创建 显示 刷新窗口(注建显新),事件,消息循环,消息处理,钩子,dll钩子. (注重理解其中的逻辑关系)
- 稳扎稳打Silverlight(32) - 2.0Tip/Trick之MessageBox, Popup, 循环的几种实现方法, 动态变换主题, 本地化(多语言), 响应鼠标双击事件
- jQuery 中注册事件的几种方法
- Jack's Notes12——全选、全不选、反选(循环遍历给按钮动态注册事件)
- 循环注册页面事件
- Java中迭代列表中数据时几种循环写法的效率比较
- 循环绑定事件的两种常用闭包写法(备忘)
- document.body.onclick document监听事件兼容性的几种写法
- 拨号器和几种点击事件的写法
- 天地图WEB API 循环添加标注点,注册点击事件,标注增加属性