网站首页 > 技术文章 正文
React Redux ES6 已更新完,可以在主页中找到相关文章,小编辛苦码字,喜欢的点个赞吧
事件捕获和事件冒泡
盒子多层嵌套时,当你点击某个盒子,浏览器实际上并不知道点的是哪个,它得一层层去查,查到有点击事件则执行。
历史初期查找方案:
ie是从最内层开始查,直到查到最外层,即为冒泡流;
而网景提出的是从最外层开始查,即为捕获流;
现阶段方案:
W3C提出了都支持方案,但ie低版本只支持冒泡流,为了兼容建议使用冒泡流。
事件绑定的方式
1. dom里直接配置属性
<div onclick="show()">按钮</div>
考虑js和html的分离不建议使用此方式
2. js操作dom属性绑定
document.getElementById('btn').onclick = function(e){
...
}
3. 事件监听
**非ie8-**
绑定:
target.addEventListener (type, fn, true/false)
移除:
target.removeEventListener (type, fn, true/false)
type指事件类型;fn指执行函数;设为true指使用捕获流(实际上目前第3个参数可以是个对象,后期有需要再补充)
区别:除了可以设置捕获,事件监听还可以绑定多个事件,而使用属性绑定只能有一个。
document.getElementById('e').addEventListener('click',function (event) {
console.log('e',event)
},true);
**ie8-**
绑定:target.attachEvent(type, fn)
移除:target.detachEvent(type, fn)
ie是冒泡流,需要注意的是fn里的this指向window(正常指向触发事件的元素,这很有用)
注:各种浏览器默认的都是冒泡,避免使用捕获
event 对象
使用注意:var e= event || window.event (火狐使用window.event会报错)。
表示在DOM中发生的任何事件,在事件处理函数被传入,主要关注2个属性:currentTarget target
1. event.currentTarget 当前目标元素(绑定事件的元素)
2. event.target / this / event.srcElement(ie8-) 触发目标元素(从哪个元素开始触发的,随着冒泡不断变化)
//加上div#f内套div#e
document.getElementById('e').addEventListener('click',function (e) {
console.log(e.target); //div#f
console.log(e.currentTarget); //div#e
},true);
注:有时可能只希望触发一个事件或者事件委托,可以使用此方式
阻止默认事件
比如用在阻止radio/checkbox选中
1. 对于onclick绑定方式:return false
2. 对于监听绑定方式:
event.preventDefault()
window.event.returnValue = false (ie8-)
事件委托
即把事件绑定在父节点上,通常用在子节点不存在时的情况,或者子节点多且绑定相同事件的情况
//如下,div#f不存在的情况下绑定好事件
document.getElementById('e').addEventListener('click',function (e) {
var e=e||window.event;
var target=e.target||e.srcElement;
if(target.id==='f'){
alert('find children f')
}
});
document.getElementById('e').innerHTML='<div id="f"></div>';
征稿
坑
你在平时开发中也踩过坑吗?把踩过的‘坑’分享给大家,私信小编
文章 & 笔记
报酬
你除了把此当作兴趣之外,还可以获得此号当天的阅读收益——很少 (一个悲伤的表情)
更多文章可以在个人主页中查看
【前方雾大,关注一下不迷路 = 。=】
【html】【css】【html】【css】【前端开发】【javascript】【html】【javascript】【前端开发】【css】【javascript】【css】【前端开发】
猜你喜欢
- 2024-09-20 Vue.js常见的20道前端面试题及答案
- 2024-09-20 AI面试官:我能胜任React(二)(我能胜任这份工作吗)
- 2024-09-20 70个JavaScript知识点详细总结(上)【实践】
- 2024-09-20 ReactDOM.render和ReactDOM.createPortal的区别
- 2024-09-20 学会使用Vue JSX,一车老干妈都是你的
- 2024-09-20 字节P8大佬爆肝整理,一文带你梳理React面试题!
- 2024-09-20 2024前端面试真题之—VUE篇(2020web前端经典面试题 vue)
- 2024-09-20 JS事件绑定的常用方式实例总结(js事件绑定的四种方式)
- 2024-09-20 JavaScript 的基本术语大全(javascript的基本概念)
- 2024-09-20 React18内核探秘:手写React高质量源码迈向高阶开发(超清完结)
- 1514℃桌面软件开发新体验!用 Blazor Hybrid 打造简洁高效的视频处理工具
- 563℃Dify工具使用全场景:dify-sandbox沙盒的原理(源码篇·第2期)
- 508℃MySQL service启动脚本浅析(r12笔记第59天)
- 486℃服务器异常重启,导致mysql启动失败,问题解决过程记录
- 485℃启用MySQL查询缓存(mysql8.0查询缓存)
- 465℃「赵强老师」MySQL的闪回(赵强iso是哪个大学毕业的)
- 445℃mysql服务怎么启动和关闭?(mysql服务怎么启动和关闭)
- 442℃MySQL server PID file could not be found!失败
- 最近发表
- 标签列表
-
- c++中::是什么意思 (83)
- 标签用于 (65)
- 主键只能有一个吗 (66)
- c#console.writeline不显示 (75)
- pythoncase语句 (81)
- es6includes (73)
- windowsscripthost (67)
- apt-getinstall-y (86)
- node_modules怎么生成 (76)
- c++int转char (75)
- static函数和普通函数 (76)
- el-date-picker开始日期早于结束日期 (70)
- js判断是否是json字符串 (67)
- checkout-b (67)
- c语言min函数头文件 (68)
- asynccallback (71)
- localstorage.removeitem (74)
- vector线程安全吗 (70)
- & (66)
- java (73)
- js数组插入 (83)
- mac安装java (72)
- eacces (67)
- 查看mysql是否启动 (70)
- 无效的列索引 (74)