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使用手册之一
Mar 24 Javascript
JavaScript中的集合及效率
Jan 08 Javascript
Jquery中获取iframe的代码
Jan 11 Javascript
JavaScript 对任意元素,自定义右键菜单的实现方法
May 08 Javascript
含有CKEditor的表单如何提交
Jan 09 Javascript
angularjs指令中的compile与link函数详解
Dec 06 Javascript
javascript获取当前鼠标坐标的方法
Jan 10 Javascript
谈一谈javascript中继承的多种方式
Feb 19 Javascript
jquery树形菜单效果的简单实例
Jun 06 Javascript
javascript运算符——位运算符全面介绍
Jul 14 Javascript
Vue组件开发技巧总结
Mar 04 Javascript
微信小程序当前时间时段选择器插件使用方法详解
Dec 28 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
Windows下PHP5和Apache的安装与配置
2006/09/05 PHP
php自动加载的两种实现方法
2010/06/21 PHP
基于php中使用excel的简单介绍
2013/08/02 PHP
ThinkPHP之getField详解
2014/06/20 PHP
php获取twitter最新消息的方法
2015/04/14 PHP
php打包网站并在线压缩为zip
2016/02/13 PHP
PHP加密3DES报错 Call to undefined function: mcrypt_module_open() 如何解决
2016/04/17 PHP
PHP基于MySQLI函数封装的数据库连接工具类【定义与用法】
2017/08/11 PHP
js 模拟气泡屏保效果代码
2010/07/10 Javascript
javascript 操作符(~、&amp;、|、^、)使用案例
2014/12/31 Javascript
DOM基础教程之使用DOM
2015/01/19 Javascript
js获取html的span标签的值方法(超简单)
2016/07/26 Javascript
AngularJS 模块详解及简单实例
2016/07/28 Javascript
vue.js表格组件开发的实例详解
2016/10/12 Javascript
JS组件系列之Gojs组件 前端图形化插件之利器
2017/11/29 Javascript
JS实现的简单下拉框联动功能示例
2018/05/11 Javascript
vue项目中实现缓存的最佳方案详解
2019/07/11 Javascript
简单分析js中的this的原理
2019/08/31 Javascript
uni-app微信小程序登录并使用vuex存储登录状态的思路详解
2019/11/04 Javascript
基于vue+echarts 数据可视化大屏展示的方法示例
2020/03/09 Javascript
js 数据类型判断的方法
2020/12/03 Javascript
简单讲解Python中的数字类型及基本的数学计算
2016/03/11 Python
python 循环while和for in简单实例
2016/08/16 Python
使用DataFrame删除行和列的实例讲解
2018/04/08 Python
Selenium常见异常解析及解决方案示范
2020/04/10 Python
巧用CSS3的calc()宽度计算做响应模式布局的方法
2018/03/22 HTML / CSS
娇韵诗俄罗斯官方网站:Clarins俄罗斯
2020/10/03 全球购物
美容师的职业规划书
2013/12/27 职场文书
程序员求职信
2014/04/16 职场文书
优秀党务工作者事迹材料
2014/05/07 职场文书
农行心得体会
2014/09/02 职场文书
离职证明标准格式
2014/09/15 职场文书
坚守艰苦奋斗精神坚决反对享乐主义整改措施
2014/09/17 职场文书
基于Python实现股票收益率分析
2022/04/02 Python
jdbc中自带MySQL 连接池实践示例
2022/07/23 MySQL
uniapp引入支付宝原生扫码插件步骤详解
2022/07/23 Javascript