位置: 编程技术 - 正文

javascript 中的事件委托详解

编辑:rootadmin

推荐整理分享javascript 中的事件委托详解,希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:,内容如对您有帮助,希望把文章链接给更多的朋友!

这几天看到一个面试题,大概就是,让你给个li都添加一个click事件,应该怎么添加&#;大多数人第一开始的感觉可能就是,每个li上边都添加一个呗,那要是这样的话,估计面试的时候就会GG了,这里就是撤出了我们的事件冒泡和捕获机制,以及事件委托机制,对于上边这些,我们慢慢来看.

  首先说一下事件冒泡和事件捕获机制,事件冒泡是有微软公司提出来的,事件捕获是有网景公司提出来的,当时两家是争论的不可开交,后来w3c也没办法,就采取了折中的方式,事件产生后先捕获后冒泡,

  通常,在js中监听事件的方法共有三种,分别是:

    ele.addEventListener(type,listener,[useCapture]);//IE6~8不支持

    ele.attachEvent('on'+type,listener);//IE6~支持,IE不支持

    ele.onClick=function(){};//所有浏览器都支持

  w3c规范中定义了三个事件阶段,依次是捕获阶段,目标阶段,冒泡阶段,而w3c指定的dom2级规定中,使用的是addEventListener来监听事件的.所以我们就以addEventListener来讲解,首先事假冒泡就像你从往水中扔一块石子,水中的气泡从下边往上冒一样,意思为触发事件后从子元素王父元素方向触发,而捕获机制则正好相反,捕获机制是从父元素往子元素方向进行事件触发,而addEventListener函数中的第三位参数正是来决定是使用捕获机制还是冒泡机制的,当useCapture为true是为捕获机制,当useCapture为false时是冒泡机制,我们看一下例子:

复制代码

javascript 中的事件委托详解

  当我们点击子元素是显示上图,当我们将false改为true后就会发现执行顺序会反过来,这就是事件冒泡和捕获的区别,他们两个刚好相反,

  那么使用这种绑定机制我们的弊端在于要去给每一个对象绑定事件会是一个特别麻烦的事情,当我们要删除一个事件或者要改变一个事件的时候会特别的繁琐,更重要的是,我们增加了JavaScript和dom节点之间的关联,而且一点出现循环引用,很有可能造成内存泄露,这些都是它的弊端,

  那么解决这种弊端的一种方法就是事件代理(event delegation),这个方法可以让你避免去给每一个节点一一的添加事件,它的做法是将这些监听事件去绑定到这些节点的父元素上,在父元素上的这个监听函数自动去判断是哪一个子元素触发的事件,从而可以对触发事件的子元素进行操作,这里我们给出的例子是davidwalsh所给出的一个例子:

  现在我们有一个父元素ul和几个li子元素,

  现在我们要实现的是,当我们点击每一个li节点的时候,都会输出li节点中的内容,按照上边的写法,你可以选中这些li,让后给他们加上这些方法,然后等到不需要了再将他们移除,如果有个li,个li呢,这将会成为你的噩梦,较好的解决方法就是给父元素添加一个监听事件,之后的问题便是怎么去判断出来时哪一个li被点击了&#; 我们可以在监听事件中去判断当前event的target来判断是否是我们要找的节点,这里我们有一个简单的例子:

  当ul中发生点击事件后,因为addEventListener默认是冒泡事件,所以监听事件会在底层事件冒泡过来时执行,在触发了事件后,去检测是否是我们要寻找的目标元素,如果不是,就会忽略过去,那我们不仅仅可以通过目标元素的标签是不是我们需要的目标元素,我们还可以根据目标元素的属性或者类名来进行检测,利用ele.maeches这个API来进行处理,

  因此我们可以看得出来,使用事件代理这种方式,能够给我们带来很多的便捷,可以避免很多坑,使用事件代理是一种很强大的方法.

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

深入理解JavaScript定时机制 本文介绍了JavaScript定时机制,要理解JavaScript的定时机制,就要知道JavaScript的运行机制。首先声明,JavaScript是单线程运行(JavaScript引擎线程)事件驱动

getElementById().innerHTML与getElementById().value的区别 因为总有新手朋友问这个问题,所以积木网小编特整理一下方法需要的朋友。简单来说:表单用value,插入字符用innerHTML比如inputtype="text"value=""id="gimoo"/

深入理解JavaScript中的块级作用域、私有变量与模块模式 本文详细的介绍了JavaScript中的块级作用域、私有变量与模块模式,废话就不多说了,具体如下:1.块级作用域(私有作用域),经常在全局作用域中被用在

标签: javascript 中的事件委托详解

本文链接地址:https://www.jiuchutong.com/biancheng/376011.html 转载请保留说明!

上一篇:10分钟掌握XML、JSON及其解析(10分钟掌握心理学)

下一篇:深入理解JavaScript定时机制(深入理解计算机系统)

  • 合同履约成本资本化
  • 金税开票软件下载安装
  • 二手车过户需要带什么资料
  • 12366纳税服务平台官网
  • 增值税普通发票税率
  • 月度税率表和综合所得税率表区别
  • 金税盘服务费全额抵扣是什么意思
  • 融资租赁公司收购要求
  • 如何开增值税专用发票视频
  • 提供咨询服务的小规模企业是一般纳税人吗
  • 收到厂家给医药的短信
  • 银行汇票怎么填写
  • 已抵扣进项怎么转出
  • 发票缴税怎么交的
  • 月末收到一批b材料,结算凭证未到,估价50000
  • 一次性奖金可以分2次发吗
  • 已出账但未认证的抵扣联怎么办?
  • 税收六项减免
  • 企业所得税纳税申报表A类
  • 银行开户存入的钱怎么取
  • 审计调账后企业怎么处理
  • 固定资产提前报废账务处理
  • 股东实缴出资的证明
  • 外汇收入情况说明
  • php 二叉树的遍历
  • 世界上最早的计算机是
  • 损益类科目怎么结转
  • php实现删除功能
  • 劳务费发票和建筑劳务费发票
  • php的二维数组
  • 运输中合理损耗计入采购成本
  • 一个简单安全的小故事
  • 网络销售平台优势和劣势
  • 事业单位应当按月对固定资产计提折旧
  • 当月银行账可以下个月做吗
  • 公司签发银行承兑汇票的行为属于什么行为
  • 差额征税可以开专票抵扣吗
  • 五种差异化收费方式
  • 收付转凭证和记帐凭证的区别?
  • 丢失增值税发票怎么办
  • sql server 18486
  • mysql密码忘了
  • sqlserver游标的使用
  • 营业收入的构成分析主要包括
  • 全资子公司注销的账务处理
  • 无形资产摊销计算方法
  • mysql5.7版本安装教程
  • 跨年预收账款被税局要求确认收入怎么交增值税
  • 公租房特许经营权转让
  • 跨年暂估成本如何冲销
  • 预售期的房子是否可以买卖
  • 咨询费放到什么科目
  • 交易或事项对会计等式的影响基本类型
  • 收到免费赠送的产品怎么做账
  • 如何计算更新改造后的入账价值
  • 员工医药费属于什么费用
  • 上个月的发票可以作废吗
  • 费用报销单和费用核销单一样吗
  • 企业营运能力分析
  • 房地产会计核算地上地下成本分摊
  • win7旗舰版和家庭版哪个对电脑要求低
  • MacOS X Yosemite升级后postgresql启动报错的解决办法
  • QQExternal.exe是什么进程?QQExternal.exe进程为什么被运行?
  • win7 便签
  • 一招让你的wifi网速翻倍
  • mini programes
  • win10一年更新一次
  • xp系统如何优化
  • windows10 14393版本
  • Android游戏开发pdf
  • 批处理语言 从入门到精通
  • perl-v
  • JavaScript中的this指向
  • JavaScript replace(rgExp,fn)正则替换的用法
  • jquery怎么给div赋值
  • layui jquery事件失效
  • python 文件操作,读,写,指定位置
  • 国家税务局浙江电子税务局官网入口
  • 国家税务总局关于税务机构改革有关事项的公告
  • 企业税收有哪些税种
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设