利用闭包实现onclick事件传递参数
2016-11-19 14:56
495 查看
当触发点击事件,一个简单的例子。
但是,当我想要得到循环外的变量值。
由于当我点击的时候,i的值已经是3了,所以会undefined。现在的问题就是怎么才能在每次循环中把i的值保存下来。
闭包的经典回答应该是:延长局部变量的生命周期
<!DOCTYPE html> <html> <head> <title>闭包创建数组</title> <meta charset="utf-8"> <script type="text/javascript"> window.onload = function (){ var lis = document.getElementsByTagName('li'); for (var i = 0; i < lis.length; i++) { lis[i].onclick = function () { console.log(this.innerHTML); }; } } </script> </head> <body> <h2>闭包点击事件</h2> <ul> <li>奔驰</li> <li>宝马</li> <li>奥迪</li> </ul> </body> </html>
但是,当我想要得到循环外的变量值。
<!DOCTYPE html> <html> <head> <title>闭包创建数组</title> <meta charset="utf-8"> <script type="text/javascript"> window.onload = function (){ var lis = document.getElementsByTagName('li'); var price = [1, 10, 100]; for (var i = 0; i < lis.length; i++) { lis[i].onclick = function () { console.log(this.innerHTML+ '的价格:' + price[i]); }; } } </script> </head> <body> <h2>闭包点击事件</h2> <ul> <li>奔驰</li> <li>宝马</li> <li>奥迪</li> </ul> </body> </html>
由于当我点击的时候,i的值已经是3了,所以会undefined。现在的问题就是怎么才能在每次循环中把i的值保存下来。
<!DOCTYPE html> <html> <head> <title>闭包创建数组</title> <meta charset="utf-8"> <script type="text/javascript"> window.onload = function (){ var lis = document.getElementsByTagName('li'); var price = [1, 10, 100]; for (var i = 0; i < lis.length; i++) { lis[i].onclick = (function (n) { console.log("i:"+i+";n:"+n); return function () { console.log(this.innerHTML+ '的价格:' + price ); }; })(i); } } </script> </head> <body> <h2>闭包点击事件</h2> <ul> <li>奔驰</li> <li>宝马</li> <li>奥迪</li> </ul> </body> </html>
闭包的经典回答应该是:延长局部变量的生命周期
相关文章推荐
- 利用TimerCallback实现timer传递参数
- 利用XML转换为table实现在SQL参数中传递表结构
- HTML中动态图片的onclick事件参数传递
- 不用闭包,不用函数,实现传递"参数"的功能
- Javascript中button按钮的onclick()事件传递参数
- Asp.Net 实现线程传递多个参数。。。。。。。。。。。。。(并利用线程动态替代Word内的书签等)
- 如何给html元素的onclick事件传递参数(即如何获取html标签的data-*属性)
- (转)Java程序利用main函数中args参数实现参数的传递
- Java程序利用main函数中args参数实现参数的传递
- JQuery 绑定事件时传递参数的实现方法
- Java程序利用main函数中args参数实现参数的传递
- html静态页面传递参数-利用JavaScript方法实现静态
- js 利用闭包循环给li绑定参数不同的点击事件
- 利用js方法实现html静态页面间参数传递
- RUBY-FLEX实践—利用swfobject实现Rails与Flex传递参数
- JavaScript闭包的应用案例——让Onclick事件都能正确的弹出相应的参数
- 利用dispatchSetPressed方法实现自定义监听onClick事件
- addEventListener(type, fn , true/false)绑定事件第三个参数作用以及利用事件的冒泡,实现事件委托
- 利用JavaScript方法实现静态html页面参数传递
- 利用闭包实现给按钮注册单击事件和键盘事件