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文件具体该怎么实现
Jan 14 Javascript
js post提交调用方法
Feb 12 Javascript
Javascript 计算字符串在localStorage中所占字节数
Oct 21 Javascript
js仿百度切换皮肤功能(html+css)
Jul 10 Javascript
javascript 正则表达式去空行方法
Jan 24 Javascript
Node.js readline模块与util模块的使用
Mar 01 Javascript
详解解决使用axios发送json后台接收不到的问题
Jun 27 Javascript
为什么说JavaScript预解释是一种毫无节操的机制详析
Nov 18 Javascript
JS实现点击li标签弹出对应的索引功能【案例】
Feb 18 Javascript
Layui数据表格跳转到指定页的实现方法
Sep 05 Javascript
javascript设计模式 ? 观察者模式原理与用法实例分析
Apr 22 Javascript
微信小程序实现左滑删除效果
Nov 18 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 Hash函数,增强密码安全
2011/02/25 PHP
完美解决PHP中的Cannot modify header information 问题
2013/08/12 PHP
适用于初学者的简易PHP文件上传类
2015/10/29 PHP
php事务回滚简单实现方法示例
2017/03/28 PHP
使用 laravel sms 构建短信验证码发送校验功能
2017/11/06 PHP
php中html_entity_decode实现HTML实体转义
2018/06/13 PHP
ThinkPHP3.2框架操作Redis的方法分析
2019/05/05 PHP
js 发个判断字符串是否为符合标准的函数
2009/04/27 Javascript
jquery的Tooltip插件 qtip使用详细说明
2010/09/08 Javascript
IE6浏览器下resize事件被执行了多次解决方法
2012/12/11 Javascript
node在两个div之间移动,用ztree实现
2013/03/06 Javascript
Jquery easyui 下loaing效果示例代码
2013/08/12 Javascript
火狐下input焦点无法重复获取问题的解决方法
2014/06/16 Javascript
倾力总结40条常见的移动端Web页面问题解决方案
2016/05/24 Javascript
基于 Vue.js 之 iView UI 框架非工程化实践记录(推荐)
2017/11/21 Javascript
vue如何根据网站路由判断页面主题色详解
2018/11/02 Javascript
gulp构建小程序的方法步骤
2019/05/31 Javascript
layui的数据表格+springmvc实现搜索功能的例子
2019/09/28 Javascript
如何将Node.js中的回调转换为Promise
2020/11/10 Javascript
[05:49]2014DOTA2TI4正赛第二日综述 昔日冠军纷纷落马 VG LGD占尽先机
2014/07/20 DOTA
[01:06:18]DOTA2-DPC中国联赛 正赛 Phoenix vs Dynasty BO3 第二场 1月26日
2021/03/11 DOTA
python实现用户登陆邮件通知的方法
2015/07/09 Python
Python中的descriptor描述器简明使用指南
2016/06/02 Python
详解Python安装scrapy的正确姿势
2018/06/26 Python
Python之两种模式的生产者消费者模型详解
2018/10/26 Python
使用分层画布来优化HTML5渲染的教程
2015/05/08 HTML / CSS
HTML5 manifest离线缓存的示例代码
2018/08/08 HTML / CSS
Vichy薇姿加拿大官网:法国药妆,全球专业敏感肌护肤领先品牌
2018/07/11 全球购物
Proenza Schouler官方网站:纽约女装和配饰品牌
2019/01/03 全球购物
The Body Shop美体小铺西班牙官网:天然化妆品
2019/06/21 全球购物
能源工程专业应届生求职信
2014/03/01 职场文书
创业融资计划书
2014/04/25 职场文书
质量管理标语
2014/06/12 职场文书
篮球友谊赛通讯稿
2014/10/10 职场文书
民主评议党员工作总结
2014/10/20 职场文书
二手车交易协议书标准版
2014/11/16 职场文书