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 function、指针及内置对象
Feb 19 Javascript
运用jquery实现table单双行不同显示并能单行选中
Jul 25 Javascript
原生js操作checkbox用document.getElementById实现
Oct 12 Javascript
浅谈javascript中的DOM方法
Jul 16 Javascript
第八篇Bootstrap下拉菜单实例代码
Jun 21 Javascript
js的各种排序算法实现(总结)
Jul 23 Javascript
Bootstrap列表组学习使用
Feb 09 Javascript
详谈$.data()的用法和作用
Feb 13 Javascript
vue.js移动端tab组件的封装实践实例
Jun 30 Javascript
Node.js  事件循环详解及实例
Aug 06 Javascript
Vue v2.4中新增的$attrs及$listeners属性使用教程
Jan 08 Javascript
微信小程序onShareTimeline()实现分享朋友圈
Jan 07 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中DOMElement操作xml文档实例演示
2013/03/26 PHP
探讨:array2xml和xml2array以及xml与array的互相转化
2013/06/24 PHP
对于ThinkPHP框架早期版本的一个SQL注入漏洞详细分析
2014/07/04 PHP
Laravel学习教程之IOC容器的介绍与用例
2017/08/15 PHP
微信公众平台开发教程①获取用户Openid及个人信息图文详解
2019/04/10 PHP
laravel excel 上传文件保存到本地服务器功能
2019/11/14 PHP
JQuery动态给table添加、删除行 改进版
2011/01/19 Javascript
JavaScript实现简单的时钟实例代码
2013/11/23 Javascript
jquery清空表单数据示例分享
2014/02/13 Javascript
js的[defer]和[async]属性
2014/11/24 Javascript
node.js中的http.response.setHeader方法使用说明
2014/12/14 Javascript
运行Node.js的IIS扩展iisnode安装配置笔记
2015/03/02 Javascript
深入理解JavaScript程序中内存泄漏
2016/03/17 Javascript
js自调用匿名函数的三种写法(推荐)
2016/08/19 Javascript
bootstrap suggest搜索建议插件使用详解
2017/03/25 Javascript
详解如何使用webpack+es6开发angular1.x
2017/08/16 Javascript
React中this丢失的四种解决方法
2019/03/12 Javascript
jquery实现动态改变css样式的方法分析
2019/05/27 jQuery
利用不到200行代码写一款属于你自己的js类库
2019/07/08 Javascript
js数组相减简单示例【删除a数组所有与b数组相同元素】
2020/03/04 Javascript
Python使用matplotlib实现的图像读取、切割裁剪功能示例
2018/04/28 Python
Python实现ping指定IP的示例
2018/06/04 Python
python之验证码生成(gvcode与captcha)
2019/01/02 Python
python实现简单颜色识别程序
2020/02/19 Python
pyqt5实现井字棋的示例代码
2020/12/07 Python
美国知名男士服饰品牌:Brooks Brothers(布克兄弟)
2016/08/25 全球购物
车库门开启器、遥控器和零件:Chamberlain
2019/04/09 全球购物
PatPat阿根廷:妈妈们的购物平台
2019/05/30 全球购物
List, Set, Map是否继承自Collection接口?
2016/05/16 面试题
高级护理专业毕业生推荐信
2013/12/25 职场文书
关于运动会的广播稿
2014/09/22 职场文书
工作作风整顿个人剖析材料
2014/10/11 职场文书
领导班子整改方案
2014/10/25 职场文书
2015年九一八事变纪念活动实施方案
2015/05/06 职场文书
2016优秀班主任个人先进事迹材料
2016/02/26 职场文书
python 利用 PIL 将数组值转成图片的实现
2021/04/12 Python