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 相关文章推荐
在Javascript中为String对象添加trim,ltrim,rtrim方法
Sep 22 Javascript
JavaScript访问样式表代码
Oct 15 Javascript
JS实现点击文字对应DIV层不停闪动效果的方法
Mar 02 Javascript
Three.js学习之网格
Aug 10 Javascript
javascript实现根据汉字获取简拼
Sep 25 Javascript
jQuery滚动监听实现商城楼梯式导航效果
Mar 06 Javascript
Webpack实战加载SVG的方法
Dec 26 Javascript
vue2.0+vue-dplayer实现hls播放的示例
Mar 02 Javascript
使用 Vue cli 3.0 构建自定义组件库的方法
Apr 30 Javascript
vue-cli3+typescript新建一个项目的思路分析
Aug 06 Javascript
Vue-cli assets SubDirectory及PublicPath区别详解
Aug 18 Javascript
JavaScript实现刮刮乐效果
Nov 01 Javascript
浅析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 日常开发小技巧
2009/09/23 PHP
php清除和销毁session的方法分析
2015/03/19 PHP
简介WordPress中用于获取首页和站点链接的PHP函数
2015/12/17 PHP
php使用imagecopymerge()函数创建半透明水印
2018/01/25 PHP
PHP实现搜索时记住状态的方法示例
2018/05/11 PHP
通过 Dom 方法提高 innerHTML 性能
2008/03/26 Javascript
认识延迟时间为0的setTimeout
2008/05/16 Javascript
jQuery DIV弹出效果实现代码
2009/07/03 Javascript
js获取url参数值的两种方式
2013/09/10 Javascript
JQuery事件e参数的方法preventDefault()取消默认行为
2013/09/26 Javascript
JavaScript实现两个Table固定表头根据页面大小自行调整
2014/01/03 Javascript
jquery中 $.expr使用实例介绍
2014/06/09 Javascript
Javascript实现简单二级下拉菜单实例
2014/06/15 Javascript
jQuery实现的点赞随机数字显示动画效果(附在线演示与demo源码下载)
2015/12/31 Javascript
JavaScript中实现无缝滚动、分享到侧边栏实例代码
2016/04/06 Javascript
AngularJS中transclude用法详解
2016/11/03 Javascript
详解vue2路由vue-router配置(懒加载)
2017/04/08 Javascript
微信小程序设置滚动条过程详解
2019/07/25 Javascript
Vue关于组件化开发知识点详解
2020/05/13 Javascript
详解Python中内置的NotImplemented类型的用法
2015/03/31 Python
python版学生管理系统
2018/01/10 Python
Python基于SMTP协议实现发送邮件功能详解
2018/08/14 Python
使用python Fabric动态修改远程机器hosts的方法
2018/10/26 Python
python通用读取vcf文件的类(复制粘贴即可用)
2020/02/29 Python
台湾网购生鲜第一品牌:i3Fresh爱上新鲜
2017/10/26 全球购物
Dogeared官网:在美国手工制作的珠宝
2019/08/24 全球购物
以太网Ethernet IEEE802.3
2013/08/05 面试题
汽车制造与装配专业自荐信范文
2014/01/02 职场文书
亲戚结婚的请假条
2014/02/11 职场文书
公司请假条格式
2014/04/11 职场文书
班干部竞选演讲稿
2014/04/24 职场文书
小城镇建设汇报材料
2014/08/16 职场文书
业务员年终工作总结2015
2015/05/28 职场文书
2016年3月份红领巾广播稿
2015/12/21 职场文书
从np.random.normal()到正态分布的拟合操作
2021/06/02 Python
python可视化分析绘制带趋势线的散点图和边缘直方图
2022/06/25 Python