Javascript动态绑定事件的简单实现代码


Posted in Javascript onDecember 25, 2010

下面是页面的dom结构

<ul id="test"> 
<li>One</li> 
<li>Two</li> 
<li>Three</li> 
<li>Four</li> 
</ul>

下面是javascript代码
//根据ID获取对象 
function id(v) { return document.getElementById(v); } //根据标记获取对象 
function tag(element, t) { return element.getElementsByTagName(t); } 
window.onload = function() { 
//获取test下的所有li对象 
var li = tag(id("test"), "li"); 
//用循环绑定鼠标单击事件 
for(var i=0; i<li.length; i++) { 
li[i].onclick = function() { 
//期望弹出1,2,3,4 
//结果弹出的总是5 
alert("你点击了第" + (i+1) + "项"); 
} 
} 
}

为什么会出现上边的现像呢?原因是“for中的事件绑定并没有马上得到执行”。修改后的代码如下:
//根据ID获取对象 
function id(v) { return document.getElementById(v); } //根据标记获取对象 
function tag(element, t) { return element.getElementsByTagName(t); } 
window.onload = function() { 
//获取test下的所有li对象 
var li = tag(id("test"), "li"); 
//用循环绑定鼠标单击事件 
for(var i=0; i<li.length; i++) { 
(function() { 
var t = i 
li[i].onclick = function() { 
alert("你点击了第" + t + "项"); 
} 
})(); 
} 
}

测试代码,一切OK,我们正常的将循环变量i传到onclick事件对应的处理函数中。
Javascript 相关文章推荐
JQUERY THICKBOX弹出层插件
Aug 30 Javascript
jQuery UI AutoComplete 自动完成使用小记
Aug 21 Javascript
javascript的document.referrer浏览器支持、失效情况总结
Jul 18 Javascript
推荐一个封装好的getElementsByClassName方法
Dec 02 Javascript
详解Bootstrap插件
Apr 25 Javascript
javascript实现复选框全选或反选
Feb 04 Javascript
AngularJS学习第二篇 AngularJS依赖注入
Feb 13 Javascript
AngularJS页面传参的5种方式
Apr 01 Javascript
es6学习笔记之Async函数的使用示例
May 11 Javascript
原生JS实现获取及修改CSS样式的方法
Sep 04 Javascript
JS+CSS3实现的简易钟表效果示例
Apr 13 Javascript
Jquery+AJAX实现无刷新上传并重命名文件操作示例【PHP后台接收】
May 29 jQuery
浅析javascript闭包 实例分析
Dec 25 #Javascript
父子窗体间传递JSON格式的数据的代码
Dec 25 #Javascript
javascript自执行函数之伪命名空间封装法
Dec 25 #Javascript
Ext对基本类型的扩展 ext,extjs,format
Dec 25 #Javascript
JQuery live函数
Dec 24 #Javascript
jquery 单击li防止重复加载的实现代码
Dec 24 #Javascript
基于jquery的关于动态创建DOM元素的问题
Dec 24 #Javascript
You might like
php各种编码集详解和以及在什么情况下进行使用
2011/09/11 PHP
Windows2003下php5.4安装配置教程(Apache2.4)
2016/06/30 PHP
CI框架实现优化文件上传及多文件上传的方法
2017/01/04 PHP
php str_replace替换指定次数的方法详解
2017/05/05 PHP
jquery实用代码片段集合
2010/08/12 Javascript
js判断是否为数组的函数: isArray()
2011/10/30 Javascript
jquery attr方法获取input的checked属性问题
2014/05/26 Javascript
javascript闭包的理解
2015/04/01 Javascript
使用javascript将时间转换成今天,昨天,前天等格式
2015/06/25 Javascript
javascript实现网页字符定位的方法
2015/07/14 Javascript
js实现兼容IE、Firefox的图片缩放代码
2015/12/08 Javascript
Js利用console计算代码运行时间的方法示例
2017/09/24 Javascript
Vue异步加载about组件
2017/10/31 Javascript
vue router动态路由下让每个子路由都是独立组件的解决方案
2018/04/24 Javascript
JavaScript闭包与作用域链实例分析
2019/01/21 Javascript
详解vue中axios请求的封装
2019/04/08 Javascript
JavaScript函数式编程(Functional Programming)纯函数用法分析
2019/05/22 Javascript
浅谈layui使用模板引擎动态渲染元素要注意的问题
2019/09/14 Javascript
在Python的Flask框架中实现单元测试的教程
2015/04/20 Python
在Python中用split()方法分割字符串的使用介绍
2015/05/20 Python
Python中enumerate函数代码解析
2017/10/31 Python
pycharm在调试python时执行其他语句的方法
2018/11/29 Python
python并发编程多进程之守护进程原理解析
2019/08/20 Python
浅谈django channels 路由误导
2020/05/28 Python
使用tensorflow根据输入更改tensor shape
2020/06/23 Python
Css3新特性应用之形状总结
2016/12/08 HTML / CSS
大学生职业生涯规划书模版
2013/12/30 职场文书
老总助理工作岗位职责
2014/02/06 职场文书
倡议书格式范文
2014/04/14 职场文书
程序员求职信
2014/04/16 职场文书
元旦晚会活动总结
2014/07/09 职场文书
2015年安全生产月工作总结
2015/07/27 职场文书
六一儿童节致辞
2015/07/31 职场文书
2016形势与政策学习心得体会
2016/01/12 职场文书
话题作文之财富(600字)
2019/12/03 职场文书
MySQL分区表管理命令汇总
2022/03/21 MySQL