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 相关文章推荐
通过js简单实现将一个文本内容转译成加密文本
Oct 22 Javascript
JS创建自定义表格具体实现
Feb 11 Javascript
jQuery $.extend()用法总结
Jun 15 Javascript
JavaScript中九种常用排序算法
Sep 02 Javascript
JavaScript自定义数组排序方法
Feb 12 Javascript
jQuery支持动态参数将函数绑定到事件上的方法
Mar 17 Javascript
jquery UI Datepicker时间控件的使用方法(终结版)
Nov 07 Javascript
jQuery事件绑定用法详解(附bind和live的区别)
Jan 19 Javascript
实例讲解JavaScript的Backbone.js框架中的View视图
May 05 Javascript
vue-cli webpack模板项目搭建及打包时路径问题的解决方法
Feb 26 Javascript
基于VuePress 轻量级静态网站生成器的实现方法
Apr 17 Javascript
axios使用拦截器统一处理所有的http请求的方法
Nov 02 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合并数组+与array_merge的区别分析
2010/08/01 PHP
控制PHP的输出:缓存并压缩动态页面
2013/06/11 PHP
php 表单提交大量数据发生丢失的解决方法
2014/03/03 PHP
PHP守护进程化在C和PHP环境下的实现
2017/11/21 PHP
写了10年的Javascript也未必全了解的连续赋值运算
2011/03/25 Javascript
利用进制转换压缩数字函数分享
2014/01/02 Javascript
我的Node.js学习之路(三)--node.js作用、回调、同步和异步代码 以及事件循环
2014/07/06 Javascript
用原生js做个简单的滑动效果的回到顶部
2014/10/15 Javascript
轻松创建nodejs服务器(5):事件处理程序
2014/12/18 NodeJs
JS简单实现动画弹出层效果
2015/05/05 Javascript
jquery实现倒计时效果
2015/12/14 Javascript
javascript实现简易计算器的代码
2016/05/31 Javascript
详解vue的数据劫持以及操作数组的坑
2019/04/18 Javascript
用node.js写一个jenkins发版脚本
2019/05/21 Javascript
用Golang运行JavaScript的实现示例
2019/11/25 Javascript
JavaScript实现随机点名器
2020/03/25 Javascript
[58:46]OG vs NAVI 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/17 DOTA
Hadoop中的Python框架的使用指南
2015/04/22 Python
python实现图书管理系统
2018/03/12 Python
numpy中的ndarray方法和属性详解
2019/05/27 Python
python爬虫 爬取超清壁纸代码实例
2019/08/16 Python
python读取word 中指定位置的表格及表格数据
2019/10/23 Python
python读取与处理netcdf数据方式
2020/02/14 Python
详解python 条件语句和while循环的实例代码
2020/12/28 Python
iHerb中文官网:维生素、保健品和健康产品
2018/11/01 全球购物
小米官方旗舰店:Xiaomi
2020/08/07 全球购物
为什么说Ruby是一种真正的面向对象程序设计语言
2012/10/30 面试题
羽毛球比赛策划方案
2014/06/13 职场文书
保险专业求职信
2014/07/07 职场文书
四风问题对照检查材料
2014/09/22 职场文书
人身损害赔偿协议书范本
2014/09/27 职场文书
2014年综合治理工作总结
2014/11/20 职场文书
小学二年级班主任工作经验交流材料
2015/11/02 职场文书
SQLServer2019 数据库的基本使用之图形化界面操作的实现
2021/04/08 SQL Server
Python 如何将integer转化为罗马数(3999以内)
2021/06/05 Python
Go 中的空白标识符下划线
2022/03/25 Golang