javascript核心技术(三十七)原生JS和Jquery的事件对象与事件委托

[复制链接]
查看: 1684|回复: 31
发表于 2023-1-27 12:50:59 | 显示全部楼层 | 阅读模式
我们先来讲一下何为事件对象,何为事件委托。

事件对象:当触发一个事件后,该对象中保存了所有与该事件相关的数据。例如点击了哪里、单击还是双击、触发的时间、触发事件的元素信息等等之类.
事件委托:由于事件绑定的冒泡特性,即:子元素可以触发其父级元素上绑定的事件。所以我们可以通过给父元素绑定事件,达到让多个子元素都触发该事件的目的,这种绑定方式就叫做事件委托。


事件委托主要解决了两个问题。
1、使用普通的事件绑定无法给通过JS动态添加进来的元素绑定事件。
2、当我们需要同时给很多元素绑定相同的事件时,使用事件委托只需要绑定一次。

先来看以下的代码
<!DOCTYPE html>
<html>

<head>
        <meta charset="utf-8">
        <title>事件对象与事件委托</title>
        <script src="./jquery.js"></script>
</head>
<style>
        #box1 {
                height: 200px;
                width: 200px;
                background-color: antiquewhite;
        }

        #box2 {
                height: 100px;
                width: 100px;
                background-color: rgb(151, 104, 43);
        }
        #box3 {
                height: 100px;
                width: 100px;
                background-color: rgb(126, 117, 105);
        }
</style>

<body class="" id="body">
        <div id="box1">
                <div id="box2">

                </div>
                <div id="box3">

                </div>
        </div>
        <script type="text/javascript">
                //原生JS的事件委托与事件对象
                // var box1 = document.getElementById('box1');
                // box1.onclick=function(e){
                //         console.log(e.target); //触发节点元素 
                //         console.log(e.currentTarget);//绑定节点元素
                // console.log(this);//绑定节点元素
                // }

                //jquery的事件委托与事件对象
                // $('#box1').click(function(e) {
                //         console.log(e.target);//触发节点元素 
                //         console.log(e.currentTarget);//绑定节点元素
                //         console.log(this);//绑定节点元素
                // });

                //jquery中的事件委托专用方法on
                //语法含义为:给父元素绑定了click事件,on方法的参数二指定了可以触发该事件的子元素
                $('#box1').on('click', '#box2,#box3', function(e) {
                        console.log(e.target);//触发节点元素
                        console.log(e.currentTarget);//触发节点元素
                        console.log(this);//触发节点元素
                });
        </script>

</body>

</html>


javascript核心技术(三十七)原生JS和Jquery的事件对象与事件委托

以上代码中,我们分别使用原生js语法和jquery语法,把想要在子元素上触发的click事件绑定到了父元素上,即子元素将事件委托给了父元素。
前面两种是通用的绑定方式,第三种是jquery的on语法,三者有个共同点,那就是,它们都在事件函数中有一个形参e。
当事件函数被触发时,JS默认会给事件函数的第一个参数传入事件对象,所以我们在事件函数中使用一个形参来接收这个事件对象。
然后我们又分别打印了事件对象target属性、currentTarget属性和this。

总结如下:
通过原生JS和jquery绑定的通用事件委托函数中,target为触发节点元素,currentTarget为绑定节点元素,this为绑定节点元素。
通过jquery的on方法绑定的事件委托函数中,target、currentTarget和this均为触发节点元素。

当然,在jq中还有很多种实现事件委托的方法,这里我们只说最常用的,大家先把这些知识点掌握了再说。

以上逻辑是非常重要的,请大家务必认真思考,并动手练习一下。




易博软件介绍

0

主题

18

帖子

10

积分

营销入门

Rank: 2

积分
10
发表于 2023-2-21 07:53:18 | 显示全部楼层
你的经历直得我们学习!!   支持   希望所有的好友都看看.......

0

主题

21

帖子

11

积分

营销入门

Rank: 2

积分
11
发表于 2023-3-5 15:22:32 | 显示全部楼层
verygood,我也想成为一名高手,希望各位指教指教,嘻嘻。

0

主题

9

帖子

5

积分

营销入门

Rank: 2

积分
5
发表于 2023-3-15 20:01:42 | 显示全部楼层
编程员精典的心声,学习学习再学习

0

主题

20

帖子

11

积分

营销入门

Rank: 2

积分
11
发表于 2023-3-24 08:24:00 | 显示全部楼层
谢谢!
发表于 2023-3-31 01:38:45 | 显示全部楼层
学海无崖

0

主题

9

帖子

5

积分

营销入门

Rank: 2

积分
5
发表于 2023-4-4 13:43:53 | 显示全部楼层
之前看过了  不过还是来顶下  “计算机”爱你没商量
发表于 2023-4-9 23:48:16 | 显示全部楼层
感触很深!看来得好好不断学习,充实自己

0

主题

9

帖子

5

积分

营销入门

Rank: 2

积分
5
发表于 2023-4-14 13:43:39 | 显示全部楼层
受益匪浅,万分感谢

0

主题

30

帖子

16

积分

营销入门

Rank: 2

积分
16
发表于 2023-4-19 14:51:57 | 显示全部楼层
哎 ~~~~~~~~~~  默默无问两眼泪啊~~  太好了 , 这篇文章我一定要收藏,(楼主不介意吧)  他将是将是我踏上成功的催化剂
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

1、请认真发帖,禁止回复纯表情,纯数字等无意义的内容!帖子内容不要太简单!
2、提倡文明上网,净化网络环境!抵制低俗不良违法有害信息。
3、如果你对主帖作者的帖子不屑一顾的话,请勿回帖。谢谢合作!
3、问答求助区发帖求助后,如有其他用户热心帮您解决问题后,请自觉点击设为最佳答案按钮。

 
 
QQ在线客服
QQ技术支持
工作时间:
8:00-18:00
软著登字:
1361266号
官方微信扫一扫
weixin

QQ|小黑屋|Archiver|慈众营销 ( 粤ICP备15049986号 )|网站地图

自动发帖软件 | 自动发帖器 | 营销推广软件 | 网络营销工具 | 网络营销软件 | 网站推广工具 | 网络推广软件 | 网络推广工具 | 网页推广软件 | 信息发布软件 | 网站推广工具 | 网页推广软件

Powered by Discuz! X3.4   © 2012-2020 Comsenz Inc.  慈众科技 - Collect from 深圳吉宝泰佛文化有限公司 公司地址:罗湖区黄贝街道深南东路集浩大厦A1403

返回顶部 返回列表