Dom动态添加事件,不能使用循环变量的问题
来源:互联网 发布:js 禁用input select 编辑:程序博客网 时间:2024/05/01 23:54
代码示例:
<!DOCTYPE html><html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> </head> <body> <ul class="examp0"> <li>内容1.1</li> <li>内容1.2</li> <li>内容1.3</li> </ul> <ul class="examp1"> <li>内容2.1</li> <li>内容2.2</li> <li>内容2.3</li> </ul> <script src="http://s.thsi.cn/js/m/js/zepto.min.js"></script> <script> var ul_nub = $("ul").length; for (var i = 0; i < ul_nub; i++) { var oli_arr = $('.examp'+i).children(); var li_nub = oli_arr.length; for(var j=0; j<li_nub; j++){ $(oli_arr[j]).click(function(){ console.log(i,j); console.log($(oli_arr[j]).html()); }); } } </script> </body></html>
输出结果: 不管点击哪个li输出结果都是一样的
原因分析:
在for循环里动态给li绑定点击事件【事件在for循环执行完之后才被调用<用户单击li时>】,而调用时,会对变量i、j取值,程序首先会在事件内部查找,但i、j没有定义。然后,到事件外部查找,有定义,但此时i、j的值为2、3(只有i、j的值为2、3才会停止执行for循环)。
解决方案:
var ul_nub = $("ul").length; for (var i = 0; i < ul_nub; i++) { (function(i){ var oli_arr = $('.examp'+i).children(); var li_nub = oli_arr.length; for(var j=0; j<li_nub; j++){ (function(j){ $(oli_arr[j]).click(function(){ console.log(i,j); console.log($(oli_arr[j]).html()); }); })(j); } })(i) }
阅读全文
0 0
- Dom动态添加事件,不能使用循环变量的问题
- 关于jquery无法为动态生成的dom元素添加点击事件的问题
- 循环添加响应事件时遇到的参数变量失效问题
- jq 加入的dom点击事件不能点击的问题
- Js(DOM)动态添加节点和事件
- JS为循环动态生成的节点添加点击事件
- JS为循环动态生成的节点添加点击事件
- 关于动态添加的元素不能触发click事件
- cximage的动态库不能使用问题
- JS动态添加的属性Form不能提交的问题
- VS2010不能添加变量 双击不能添加处理事件 以及如何添加窗口系统事件
- matlab中for循环的循环变量在循环体中不能改变的问题
- 循环变量的使用
- JQuery 动态添加DOM元素及事件响应机制的2点注意
- 循环添加DOM元素
- select2使用问题--删除添加select2的DOM
- 动态添加控件中关于事件的问题
- Jquery 动态添加dom后,再为其绑定事件
- html 列表
- 项目管理工作中的一些自我反省
- C#调用Excel版本不兼容的解决方法
- shell 脚本 文件比较和数值比较
- Activity启动分析
- Dom动态添加事件,不能使用循环变量的问题
- 元素的垂直水平居中的三种方法
- html 布局
- Gradle篇一——groovy基础
- html 表单
- Android系统从加电到Home桌面出现流程分析(基于Android-2.3)
- html 框架
- 【QT】Qt对大小端字节序的处理
- HDU 6078 dp