JavaScript事件委托用法分析


Posted in Javascript onJanuary 24, 2015

本文实例讲述了JavaScript事件委托用法。分享给大家供大家参考。具体分析如下:

一、点击页面任何部分触发事件

创建一个script1.js文件。

(function() {

    eventUtility.addEvent(document, "click", function(evt) {

        alert('hello');

    });

}());

页面部分。

<head>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>

    <title></title>

</head>

<body>

    

    <script src="eventUtility.js"></script>

    <script src="script1.js"></script>

</body>

</html>

输出结果:点击页面任何一处都会弹出框。

但,我们有时候希望点击document内的某个元素来触发事件。

二、使用委托触发事件

在页面上增加a标签。

<head>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>

    <title></title>

</head>

<body>

    

    <div>

        <p><a href="#">点我</a></p>

    </div>

    <script src="eventUtility.js"></script>

    <script src="script1.js"></script>

</body>

把script1.js修改为:

(function() {

    eventUtility.addEvent(document, "click", function(evt) {

        //获取点击对象

        var target = eventUtility.getTarget(evt);

        //获取点击对象的tag名称

        var tagName = target.tagName;

        //如果tag是a

        if (tagName === "A") {

            alert("点我了");

            //阻止链接的默认行为

            eventUtility.preventDefault(evt);

        }

    });

}());

输出结果:只有点击页面上的a标签才弹出框。

以上的好处是:无论document内增加多少a标签元素,所有a标签都具有被触发的能力。像这种方式就是事件委托。我们希望为子元素注册事件,却把事件先注册到子元素的父级元素上,这样,在该父元素之内、动态添加的、任何与子元素同类的元素都注册了事件。

如果我们把事件注册到子元素上,在document中再动态添加与子元素同类的元素,都必须为这些刚动态添加的子元素分别注册事件。

另外,事件委托很好地利用了"事件冒泡"。当点击子元素,根据"事件冒泡",该子元素的父级元素捕获了该次点击事件,并触发自己的方法。

希望本文所述对大家的javascript程序设计有所帮助。

Javascript 相关文章推荐
利用js实现前台动态添加文本框,后台获取文本框内容(示例代码)
Nov 25 Javascript
JavaScript中使用Math.PI圆周率属性的方法
Jun 14 Javascript
详解JavaScript基于面向对象之创建对象(2)
Dec 10 Javascript
javascript中call apply 与 bind方法详解
Mar 10 Javascript
JS实现星星评分功能实例代码(两种方法)
Jun 09 Javascript
jquery mobile 实现自定义confirm确认框效果的简单实例
Jun 17 Javascript
JS把内容动态插入到DIV的实现方法
Jul 19 Javascript
微信小程序 页面跳转传参详解
Oct 28 Javascript
js实现二级导航功能
Mar 03 Javascript
浅谈js中的this问题
Aug 31 Javascript
angularJs中跳转到指定的锚点实例($anchorScroll)
Aug 31 Javascript
Javascript实现动态时钟效果
Nov 17 Javascript
jQuery统计上传文件大小的方法
Jan 24 #Javascript
限制上传文件大小和格式的jQuery插件实例
Jan 24 #Javascript
jQuery将所有被选中的checkbox某个属性值连接成字符串的方法
Jan 24 #Javascript
使用jQuery实现input数值增量和减量的方法
Jan 24 #Javascript
Javascript 拖拽雏形中的一些问题(逐行分析代码,让你轻松了拖拽的原理)
Jan 23 #Javascript
Javascript 拖拽雏形(逐行分析代码,让你轻松了拖拽的原理)
Jan 23 #Javascript
Javascript 拖拽的一些简单的应用(逐行分析代码,让你轻松了拖拽的原理)
Jan 23 #Javascript
You might like
解析php通过cookies获取远程网页的指定代码
2013/06/25 PHP
PHP添加Xdebug扩展的方法
2014/02/12 PHP
PHP实现找出链表中环的入口节点
2018/01/16 PHP
PHP实现浏览器格式化显示XML的方法示例
2019/01/22 PHP
[原创]提供复制本站内容时出现,该文章转自脚本之家等字样的js代码
2007/03/27 Javascript
jQuery 图像裁剪插件Jcrop的简单使用
2009/05/22 Javascript
Javascript创建Silverlight Plugin以及自定义nonSilverlight和lowSilverlight样式
2010/06/28 Javascript
JS实现让访问者自助选择网页文字颜色的方法
2015/02/24 Javascript
JavaScript分页功能的实现方法
2015/04/25 Javascript
浅谈jQuery.easyui的datebox格式化时间
2015/06/25 Javascript
js实现类似菜单风格的TAB选项卡效果代码
2015/08/28 Javascript
React-Native中禁用Navigator手势返回的示例代码
2017/09/09 Javascript
Vue 后台管理类项目兼容IE9+的方法示例
2019/02/20 Javascript
layui 关闭open弹出框 刷新table表格页面的方法
2019/09/16 Javascript
Vue.js 实现地址管理页面思路详解(地址添加、编辑、删除和设置默认地址)
2019/12/11 Javascript
Vue仿Bibibili首页的问题
2021/01/21 Vue.js
[02:11]2014DOTA2 TI专访VG战队Fenrir:队伍气氛良好
2014/07/11 DOTA
[27:08]完美世界DOTA2联赛PWL S2 SZ vs Rebirth 第二场 11.21
2020/11/23 DOTA
深入理解Python分布式爬虫原理
2017/11/23 Python
Python 最大概率法进行汉语切分的方法
2018/12/14 Python
Python 循环终止语句的三种方法小结
2019/06/24 Python
Django用户认证系统 Web请求中的认证解析
2019/08/02 Python
Python:合并两个numpy矩阵的实现
2019/12/02 Python
谈谈对css属性box-sizing的了解
2017/01/04 HTML / CSS
html5自动播放mov格式视频的实例代码
2020/01/14 HTML / CSS
TCP/IP中的TCP和IP分别承担什么责任
2012/04/21 面试题
自主招生自荐信格式
2013/12/03 职场文书
2014年公司迎新年活动方案
2014/02/24 职场文书
高中军训第一天感言
2014/03/06 职场文书
天猫某品牌专卖店运营计划书
2014/03/21 职场文书
元旦寄语大全
2014/04/10 职场文书
2014年教师学期工作总结
2014/11/08 职场文书
办公室个人总结
2015/02/28 职场文书
小学数学教学随笔
2015/08/14 职场文书
Nginx + consul + upsync 完成动态负载均衡的方法详解
2021/03/31 Servers
win server2012 r2服务器共享文件夹如何设置
2022/06/21 Servers