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确定对象类型方法
Mar 30 Javascript
js判断鼠标同时离开两个div的思路及代码
May 31 Javascript
JavaScript页面模板库handlebars的简单用法
Mar 02 Javascript
详解js运算符单竖杠“|”与“||”的用法和作用介绍
Nov 04 Javascript
Vue中的数据监听和数据交互案例解析
Jul 12 Javascript
如何选择适合你的JavaScript框架
Nov 20 Javascript
微信小程序switch组件使用详解
Jan 31 Javascript
jQuery中的$是什么意思及 $. 和 $().的区别
Apr 20 jQuery
Vue自定义toast组件的实例代码
Aug 15 Javascript
VUE:vuex 用户登录信息的数据写入与获取方式
Nov 11 Javascript
javascript实现页面的实时时钟显示示例
Aug 06 Javascript
JavaScript中CreateTextFile函数
Aug 30 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中debug_backtrace、debug_print_backtrace和匿名函数用法实例
2014/12/01 PHP
php实现字符串翻转的方法
2015/03/27 PHP
解决yii2左侧菜单子级无法高亮问题的方法
2016/05/08 PHP
PHP递归遍历指定文件夹内的文件实现方法
2016/11/15 PHP
JS定时器实例详细分析
2013/10/11 Javascript
from表单多个按钮提交用onclick跳转不同action
2014/04/24 Javascript
jQuery实现仿美橙互联两级导航菜单效果完整实例
2015/09/17 Javascript
JavaScript中输出信息的方法(信息确认框-提示输入框-文档流输出)
2016/06/12 Javascript
jQuery中fadein与fadeout方法用法示例
2016/09/16 Javascript
Vue自定义指令介绍(2)
2016/12/08 Javascript
JS实现留言板功能
2017/06/17 Javascript
JS中使用textPath实现线条上的文字
2017/12/25 Javascript
React 组件间的通信示例
2018/06/14 Javascript
node错误处理与日志记录的实现
2018/12/24 Javascript
微信小程序通过js实现瀑布流布局详解
2019/08/28 Javascript
vue使用openlayers实现移动点动画
2020/09/24 Javascript
three.js如何实现3D动态文字效果
2021/03/03 Javascript
Python下singleton模式的实现方法
2014/07/16 Python
python修改注册表终止360进程实例
2014/10/13 Python
python 获取指定文件夹下所有文件名称并写入列表的实例
2018/04/23 Python
Python找出微信上删除你好友的人脚本写法
2018/11/01 Python
Python 隐藏输入密码时屏幕回显的实例
2019/02/19 Python
Python爬虫爬取煎蛋网图片代码实例
2019/12/16 Python
详解python中的三种命令行模块(sys.argv,argparse,click)
2020/12/15 Python
解决PDF 转图片时丢文字的一种可能方式
2021/03/04 Python
CSS3的resize属性使用初探
2015/09/27 HTML / CSS
HTML5图片预览实例分享
2014/06/04 HTML / CSS
乌克兰巴士票购买网站:inBus
2021/03/12 全球购物
JAVA和C++的区别
2013/10/06 面试题
J2EE中常用的名词进行解释
2015/11/09 面试题
合同专员岗位职责
2013/12/18 职场文书
学校万圣节活动方案
2014/02/13 职场文书
大学三年计划书范文
2014/04/30 职场文书
主题班会演讲稿
2014/05/22 职场文书
收入证明申请书
2015/06/12 职场文书
安全教育主题班会总结
2015/08/14 职场文书