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 相关文章推荐
jquery得到font-size属性值实现代码
Sep 30 Javascript
AngularJS基础知识
Dec 21 Javascript
jQuery选择器源码解读(三):tokenize方法
Mar 31 Javascript
jquery模拟alert的弹窗插件
Jul 31 Javascript
Bootstrap栅格系统的使用和理解2
Dec 14 Javascript
Vue打包后出现一些map文件的解决方法
Feb 13 Javascript
对angularjs框架下controller间的传值方法详解
Oct 08 Javascript
微信小程序页面间传值与页面取值操作实例分析
Apr 30 Javascript
uni-app如何页面传参数的几种方法总结
Apr 28 Javascript
JS变量提升原理与用法实例浅析
May 22 Javascript
JavaScript实现alert弹框效果
Nov 19 Javascript
Vue在H5 项目中使用融云进行实时个人单聊通讯
Dec 14 Vue.js
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的博客ping服务代码
2012/02/04 PHP
php判断正常访问和外部访问的示例
2014/02/10 PHP
php与flash as3 socket通信传送文件实现代码
2014/08/16 PHP
PHP中SSO Cookie登录分析和实现
2015/11/06 PHP
PHP 与 UTF-8 的最佳实践详细介绍
2017/01/04 PHP
php图形jpgraph操作实例分析
2017/02/22 PHP
php curl简单采集图片生成base64编码(并附curl函数参数说明)
2019/02/15 PHP
YII2框架中actions的作用与使用方法示例
2020/03/13 PHP
js DOM模型操作
2009/12/28 Javascript
解析jquery中的ajax缓存问题
2013/12/19 Javascript
禁止页面刷新让F5快捷键及右键都无效
2014/01/22 Javascript
将中国标准时间转换成标准格式的代码
2014/03/20 Javascript
详解JavaScript的变量和数据类型
2015/11/27 Javascript
JS前端开发判断是否是手机端并跳转操作(小结)
2017/02/05 Javascript
使用requirejs模块化开发多页面一个入口js的使用方式
2017/06/14 Javascript
引入JavaScript时alert弹出框显示中文乱码问题
2017/09/16 Javascript
详解vue2.0监听属性的使用心得及搭配计算属性的使用
2018/07/18 Javascript
vue实现父子组件之间的通信以及兄弟组件的通信功能示例
2019/01/29 Javascript
利用layer实现表单完美验证的方法
2019/09/26 Javascript
微信小程序实现滚动Tab选项卡
2020/11/16 Javascript
下载安装setuptool和pip linux安装pip    
2014/01/24 Python
详解在Python中处理异常的教程
2015/05/24 Python
Python的Tornado框架实现图片上传及图片大小修改功能
2016/06/30 Python
Python实现SSH远程登陆,并执行命令的方法(分享)
2017/05/08 Python
Python运行提示缺少模块问题解决方案
2020/04/02 Python
关于HTML5 Placeholder新标签低版本浏览器下不兼容的问题分析及解决办法
2016/01/27 HTML / CSS
纽约复古灵感的现代珠宝品牌:Lulu Frost
2018/03/03 全球购物
建筑施工安全生产责任书
2014/07/22 职场文书
爬山的活动方案
2014/08/16 职场文书
世界名著读书笔记
2015/06/25 职场文书
2016年读书月活动总结范文
2016/04/06 职场文书
使用pandas模块实现数据的标准化操作
2021/05/14 Python
Redis中缓存穿透/击穿/雪崩问题和解决方法
2021/12/04 Redis
Java9新特性之Module模块化编程示例演绎
2022/03/16 Java/Android
vue+echarts实现多条折线图
2022/03/21 Vue.js
Python通用验证码识别OCR库ddddocr的安装使用教程
2022/07/07 Python