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图片滚动图片的效果(另类实现)
Jun 02 Javascript
js全屏显示显示代码的三种方法
Nov 11 Javascript
jQuery打印图片pdf、txt示例代码
Jul 22 Javascript
jQuery实现根据类型自动显示和隐藏表单
Mar 18 Javascript
js实现模拟计算器退格键删除文字效果的方法
May 07 Javascript
Vue.js常用指令汇总(v-if、v-for等)
Nov 03 Javascript
Vue键盘事件用法总结
Apr 18 Javascript
AngularJS中的promise用法分析
May 19 Javascript
webpack打包单页面如何引用的js
Jun 07 Javascript
.vue文件 加scoped 样式不起作用的解决方法
May 28 Javascript
小程序实现上传视频功能
Aug 18 Javascript
JS实现鼠标移动拖尾
Dec 27 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 将excel导入mysql
2009/11/09 PHP
PHP动态规划解决0-1背包问题实例分析
2015/03/23 PHP
PHP微信支付开发实例
2016/06/22 PHP
doctype后如何获得body.clientHeight的方法
2007/07/11 Javascript
javascript动画对象支持加速、减速、缓入、缓出的实现代码
2012/09/30 Javascript
javascript实现超炫的向上滑行菜单实例
2015/08/03 Javascript
AngularJS 中的指令实践开发指南(一)
2016/03/20 Javascript
jquery获取复选框checkbox的值的简单实现方法
2016/05/26 Javascript
JavaScript实现简单的日历效果
2016/09/25 Javascript
Nodejs进阶:核心模块net入门学习与实例讲解
2016/11/21 NodeJs
JavaScript登录记住密码操作(超简单代码)
2017/03/22 Javascript
原生javascript实现的全屏滚动功能示例
2017/09/19 Javascript
bootstrap select下拉搜索插件使用方法详解
2017/11/23 Javascript
react-navigation 如何判断用户是否登录跳转到登录页的方法
2017/12/01 Javascript
vuejs选中当前样式active的实例
2018/08/22 Javascript
JavaScript数据结构与算法之检索算法实例分析【顺序查找、最大最小值、自组织查询】
2019/02/22 Javascript
vue+elementui 对话框取消 表单验证重置示例
2019/10/29 Javascript
简单实现Python爬取网络图片
2018/04/01 Python
python3.5 email实现发送邮件功能
2018/05/22 Python
python组合无重复三位数的实例
2018/11/13 Python
django 外键model的互相读取方法
2018/12/15 Python
python 将大文件切分为多个小文件的实例
2019/01/14 Python
Python 绘制酷炫的三维图步骤详解
2019/07/12 Python
解决Django Static内容不能加载显示的问题
2019/07/28 Python
python使用sklearn实现决策树的方法示例
2019/09/12 Python
Keras loss函数剖析
2020/07/06 Python
Python获取excel内容及相关操作代码实例
2020/08/10 Python
GLAMGLOW格莱魅美国官网:美国知名的面膜品牌
2016/12/31 全球购物
菲律宾购物网站:Lazada菲律宾
2018/04/05 全球购物
Linux的文件类型
2012/03/07 面试题
ktv收银员岗位职责
2013/12/16 职场文书
演讲稿祖国在我心中
2014/05/04 职场文书
超市员工辞职信范文
2015/05/12 职场文书
离婚案件被告代理词
2015/05/23 职场文书
2015重阳节座谈会主持词
2015/07/30 职场文书
村官2015年度工作总结
2015/10/14 职场文书