focus如何实现事件委托
事件委托是利用事件冒泡机制的一种优化手段,如果有很多列表元素要绑定事件,那么就可以用事件委托来优化(不需要给每个元素都绑定事件)。但是对于focus这种特殊的表单事件,它不会冒泡,那么又该如何实现这一优化呢?有的人会说这个会同时触发click,但是如果我是通过tab切换呢?
js事件机制
js的事件机制有两种,事件冒泡和事件捕获,冒泡呢就是从触发事件的节点开始一层一层的往父节点传播;而事件捕获恰恰相反,是从根节点(document)往子节点中传播。
dom事件
1.DOM0级事件处理
dom.onclick = function(){//code}
这些事件会在事件冒泡阶段来处理,注意绑定事件必须要再dom节点存在之后。在函数中this关键字将指向目标元素,可以通过this访问所有的属性、方法。
删除绑定事件:直接重新绑定事件即可。
2.DOM2级事件处理
主要使用addEventListener/removeEventListener
dom.addEventListener(type, fn, option)
这里基本就是三个参数,第一个表示事件类型(click...),第二个事件处理函数,这个函数默认有个参数event,可以通过参数event获取一些信息,也可以通过this来获取,第三个就有些区别了可以是一个对象,也可以是一个boolean。
如果是个对象的时候:
options{
capture:Boolean //表示会在捕获阶段传播到该EventTarget上执行。
once:Boolean//表示只调用一次
passive:Boolean //表示listener永远不会调用preventDefault.默认是false,但是监听touch等事件chrome54之后版本会自动转为true。
}
如果是一个Boolean时,表示是否在捕获阶段处理事件。
解除绑定要注意,函数必须要和之前绑定的要一致,这里的一致是指向一致,并不是写成一样的就可以,函数是引用类型,所以通过变量来处理即可。
let fn = function (){}
//绑定
obj.addEventListener('click', fn, false)
//解除
obj.removeEventListener('click', fn, false)
当然对于IE8及一下需要用attachEvent/detachEvent来处理,不同点就在于只有两个参数,第一个参数同样是事件类型,但是要加上'on',第二个就是处理函数,没有第三个参数因为它支持事件冒泡。
函数中的参数event有很多属性方法,其中eventPhase可以判断事件的触发情况,1表示捕获,2表示处于目标,3表示冒泡,而一个完整的事件流程大致就是捕获->事件目标->冒泡
通过上面的知识我们很容易就想到在捕获阶段去获取事件就可以实现事件委托的效果。
parentObj.addEventListener('focus', fn, true)
focus如何实现事件委托的更多相关文章
- focus、blur事件的事件委托处理(兼容各个流浏览器)
今天工作中遇到个问题,问题是这样的,一个form表单中有比较多的input标签,因为form中的input标签中的值都需要前端做客户端校验,由于本人比较懒而且特不喜欢用循环给 每个input元素添加b ...
- js_事件委托
起因: 1.这是前端面试的经典题型,要去找工作的小伙伴看看还是有帮助的: 2.其实我一直都没弄明白,写这个一是为了备忘,二是给其他的知其然不知其所以然的小伙伴们以参考: 概述: 那什么叫事件委托呢?它 ...
- js事件委托
什么是事件委托:通俗的讲,onclick,onmouseover,onmouseout,等就是事件,委托呢,就是让别人来做,这个事件本来是加在某些元素上的,然而你却加到别人身上来做,完成这个事件. 也 ...
- [JavaScript] JavaScript事件注册,事件委托,冒泡,捕获,事件流
面试题 event 事件 事件委托是什么? 如何阻止事件冒泡,阻止默认事件呢? Javascript 的事件流模型都有什么? 事件绑定和普通事件有什么区别? Event 对象 Event 对象,当事件 ...
- jQuery之事件和批量操作、事件委托示例
一.常用事件 click(function(){...}) // 点击时触发 focus(function(){...}) // 获得焦点触发 blur(function(){...}) // 失去焦 ...
- JavaScript中事件委托(事件代理)详解
在JavaScript的事件中,存在事件委托(事件代理),那么什么是事件委托呢? 事件委托在生活中的例子: 有三个同事预计会在周一收到快递.为签收快递,有两种办法:一是三个人在公司门口等快递:二是委托 ...
- jQuery事件委托
jQuery事件委托 <ul id="ulBox"> <li data-id="1"></li> <li data-i ...
- 事件委托,js中的一种优化方法
在前端编程中,我们常会遇到一种叫做事件委托的方法. 那么, 什么是事件委托呢? 简单来说,事件就是指onclick,onmouseover,onmouseout等大部分事件,为什么说是大部分后面会提到 ...
- 理解js事件冒泡事件委托事件捕获
js事件冒泡 javascript的事件传播过程中,当事件在一个元素上出发之后,事件会逐级传播给先辈元素,直到document为止,有的浏览器可能到window为止,这就是事件冒泡现象. <di ...
随机推荐
- SQL 关联两个表的视图总结
视图就是一条select查询语句,是一张虚拟表. table a , table b 以表a基表(a LEFT JOIN b) 1.1 当update view时 更新view中表b字段并且表b ...
- 优化器,sgd,adam等
https://zhuanlan.zhihu.com/p/32230623 首先定义:待优化参数: ,目标函数: ,初始学习率 . 而后,开始进行迭代优化.在每个epoch : 计算目标函数关于 ...
- [转]解決 IE10 瀏覽器無法使用 ASP.NET 表單驗證登入的問題
今天凌晨在客戶端上線,當程式佈署到正式機後發現我們的網站唯獨只有 IE10 瀏覽器無法成功登入,任何其他瀏覽器版本或使用較低的 IE 版本都可以正常登入,使用 IE 相容性檢視也都可以正常登入,想說會 ...
- 阿贾克斯(AJAX)
AJAX :Asynchronous JavaScript and XML 异步的javascript 和xml 优点 : 在不重新加载整个页面的情况下,可以与服务器交换数据并更新部分数据 不需要 ...
- careercup-扩展性和存储限制10.3
题目 给你一个文件,里面包含40亿个整数,写一个算法找出该文件中不包含的一个整数, 假设你有1GB内存可用. 如果你只有10MB的内存呢? 解答 我们先来做个算术题,40亿个整数大概有多大? * ^ ...
- react使用echarts地图实现中国地图大区展示
日常项目中经常会用到百度地图或者echarts图标展示,今天给大家展示的是如何在react开发项目中使用百度echars的地图展示,把中国地图分为东北大区.华东大区.华南大区.华西大区.华中大区以及华 ...
- Web—01-快速入门:HTML
html概述和基本结构 <!DOCTYPE html> <html lang="en"> <head> <meta charset=&qu ...
- MySql服务未知原因消失了的解决办法
一: 5.1及后续版本: 打开计算机命令窗口,切换至mysql安装目录,然后运行bin目录下的mysqld.exe,命令如下: D:\MySQL\bin>mysqld.exe -installS ...
- React-Reflux 基础分享
因工作需要使用 React + Reflux 开发,最近几天都在努力学习着,特别是 Reflux,在网上查找的许多资料和 github 上的文档年代都有点久远,JavaScript 按照目前的节奏,更 ...
- linux系统的介绍与环境搭建准备38-40
操作系统(OS):用于控制管理计算机,形成在用户和机器之间传递信息的系统软件 linux是什么? <--unix系统是linux的前身---> 特点: 开放的源代码,自由修改 自由传播,没 ...