JavaScript 基础 学习 (四)
JavaScript 基础 学习 (四)
解绑事件
dom级 事件解绑
元素.on事件类型 = null
因为赋值的关系,所以给事件赋值为 null 的时候
事件触发的时候,就没有事件处理函数执行了
dom2级 事件解绑
元素.removeEVentListener('事件类型',要移出的事件处理函数)
元素.detachEvenbt('on事件类型', 要移除的事件处理函数)
事件的传播
当你在一个元素上触发行为的时候
你这个行为会按照元素 结构父级 的顺序, 逐层 向上 传播
就相当于在父级身上也触发了这个行为
就相当于在父级的父级身上也触发了这个行为
直到 window 为止, 都触发了同样的行为
事件的 目标
目标: 当事件触发, 事件处理函数执行的时候, 准确触发事件的那个元素
当 window 的点击事件触发的时候
是因为点击了谁, 而触发的
是因为点击自己触发的, 还是因为点击某一个子元素, 通过传播来触发的
准确触发事件的元素, 我们叫做事件的 目标
获取事件的目标, 在 事件对象 里面有记录
事件对象就是一个对象数据结构, 里面记录了本次事件的信息
事件目标的获取
在事件对象里面通过一个属性来获取
target 目标 ---- 标准浏览器
srcELement 目标 ---- IE 低版本
兼容的写法
var target = e.target || e.srcElement
事件的冒泡和捕获
就是事件触发的顺序
冒泡: 按照从 目标 到 window 的顺序来执行所有的同类型事件
捕获: 按照从 window 到 目标 的顺序来执行所有的同类型事件
我们怎么让事件按照冒泡或者捕获的顺序执行
IE 低版本只能按照冒泡的顺序执行, 没有办法设置捕获
标准浏览器, 通过 addEventListener 的第三个参数来决定是冒泡还是捕获
第三个参数, 是 布尔值
默认是 false, 表示冒泡
选填是 true, 表示捕获(一般很少使用)
阻止事件传播
例子:
确实有一个 html 嵌套的结构
我点击里面元素的时候, 需求打印 需要做的事情1
我点击外面元素的时候, 需求打印 需要做的事情2
现在当我点击里面元素的时候, 回把两个事件处理函数都执行了
但是我并不需要, 我就是点击谁触发谁的事件就好
分析问题:
当你点击 inner 元素的时候, 因为事件的传播
导致你也是点击在了 center 元素身上
所以 center 身上的点击事件也会触发
解决问题:
只要我不让事件传播, 那么我点击在 inner 身上的时候
因为禁止了事件的传播, 那么就相当于没有传播
那么就不会触发 center 身上的点击事件了
怎么阻止事件传播 - 利用事件对象里面的内容
e.stopPropagation() 停止传播 ---- 标准浏览器
e.cancelBubble = true 确认取消冒泡 ---- IE 低版本
兼容处理
如果两个都是属性, 我们可以使用 或 运算符兼容
如果一个属性一个方法, 或者两个都是方法, 那么我们就要用 if 条件来写
判断事件对象里面有没有 e.stopPropagation 这个函数, 有就执行, 没有就用另一个
if (e.stopPropagation) {
e.stopPropagetion()
} else {
e.cancelBubble = true
}
e.stopPropagation 肯定是一个函数才能 e.stopPropagetion()
判断 e.stopPropagetion 是不是一个函数就完了
在标准浏览器下他是一个函数, 你把他写在 if 条件里面就是 true
在 IE 低版本没有这个东西, 他是 undefined, 你把他写在 if 条件就是 false
事件委托
把我自己的事件, 委托给别人帮我干
我的事件交给别人来干, 那么我就不用在自己身上绑定事件了
例子: 按照目前的 页面结构
我点击每一个 li 都会因为事件冒泡而触发 ul 的点击事件
现在, 我只要给 ul 绑定一个点击事件, 那么我点击每一个 li 的时候都会触发
mouseover 和 mouseenter 的区别
mouseover 和 mouseout 的移入移出会向上传播
mouseenter 和 mouseleave 的移入移出不会向上传播
浏览器默认行为
不需要绑定, 浏览器天生自带的一个行为
表单提交: 不需要绑定提交时间, 只要点击 submit 按钮, 会自动提交跳转页面
a 超链接: 不需要绑定点击事件, 只要点击 a 标签就会跳转连接
鼠标右键: 不需要绑定右键单击事件, 只要你单击鼠标右键, 就会出现一个菜单
文本选中: 不需要绑定选中事件, 只要你框选, 就会选中页面中的文本内容
阻止浏览器默认行为
1. e.preventDefault() 标准浏览器
2. e.returnValue = false IE 低版本
3.通用的方法 return false
JavaScript 基础 学习 (四)的更多相关文章
- JavaScript基础学习(四)—Object
一.Object的基本操作 1.对象的创建 在JavaScript中,创建对象的方式有两种:构造函数和对象字面量. (1)构造函数 var person = new Object( ...
- JavaScript 基础学习1-day14
JavaScript 基础学习1 知识预览JavaScript概述二 JavaScript的基础三 JavaScript的对象BOM对象DOM对象实例练习js扩展 JavaScript概述 JavaS ...
- JavaScript 基础 学习(三)
JavaScript 基础 学习(三) 事件三要素 1.事件源: 绑定在谁身上的事件(和谁约定好) 2.事件类型: 绑定一个什么事件 3.事件处理函数: 当行为发生的时候,要执行哪一个函数 ...
- 48.javascript基础学习
javascript基础学习: http://www.w3school.com.cn/jsref/index.asp jS的引入方式: 1.行间事件:为某一个具体的元素标签赋予js内容,oncli ...
- JavaScript 基础学习(二)js 和 html 的结合方式
第一种 使用一个标签 <script type="text/javascript"> js代码; </script> 第二种 使用 script 标签,引入 ...
- Python基础学习四
Python基础学习四 1.内置函数 help()函数:用于查看内置函数的用途. help(abs) isinstance()函数:用于判断变量类型. isinstance(x,(int,float) ...
- JavaScript 基础 学习 (二)
JavaScript 基础 学习 节点属性 每一个节点都有自己的特点 这个节点属性就记录着属于自己节点的特点 1. nodeType(以一个数字来表示这个节点类型) 语法:节点.nodeT ...
- JavaScript 基础 学习 (一)
JavaScript 基础 学习 获取页面中的元素的方法 作用:通过各种方式获取页面中的元素 比如:id,类名,标签名,选择器 的方式来获取元素 伪数组: 长的和数组差不多,也是按照索引排 ...
- 几张非常有意义的JavaScript基础学习思维图
分享几张对于学习JavaScript基础知识非常有意义的图,无论你的JavaScript级别如何,“温故而知新”完全可以从这些图中得到. 推荐理由:归类非常好,非常全面 JavaScript 数组 J ...
随机推荐
- TypeError: this.xxx.substring is not a function的解决办法
这是因为已经改变了xxx的值的类型,不再是字符串的话将不会拥有substring函数, 我当时这样写的时候,直接将number类型赋予了this.enter,所以导致了错误. 改为这样之后可以使用su ...
- python自如爬虫
如果你想入门数据分析,但是苦于没有数据,那就看下文如何用 10 行代码写一个最简单的自如房源爬虫 首先我们通过分析看到自如手机版有个 url 如下:http://m.ziroom.com/list/a ...
- redis性能优化——生产中实际遇到的问题排查总结
背景 redis-K,V数据库,因其高性能的操作性和支持丰富的数据结构,目前大量被用于衔接应用层和关系数据库中间的缓存层.随着使用的场景越来越多,和数据量快速的递增,在生产环境中经常会遇到相关的性能瓶 ...
- EL+Serilog日志
简介 Elasticsearch 是一个实时的分布式搜索分析引擎,它能让你以前所未有的速度和规模,去探索你的数据. 它被用作全文检索.结构化搜索.分析以及这三个功能的组合: 安装 Elasticsea ...
- 基于web网站项目的性能测试结果分析
业务背景: 最近公司研发了一款对并发要求比较高的web项目,需要对其压力测试,模拟线上可能存在的问题,这个过程中遇到一些很多问题,这里重新梳理一下思路,希望能给遇到同样问题的小伙伴提供一个参考. 工具 ...
- Beta冲刺总结随笔
这个作业属于哪个课程 软件工程 (福州大学至诚学院 - 计算机工程系) 团队名称 WeChair 这个作业要求在哪里 Beta冲刺 这个作业的目标 Beta冲刺 作业正文 如下 其他参考文献 项目预期 ...
- 修改VirtualBox中mac的分辨率
转自 http://www.ztyhome.com/virtualbox-mac-fen-bian-lv/?replytocom=3162 最近在windows上用VirtualBox安装了MAC o ...
- 也来聊聊 HTTPS.
前言: 网上聊 HTTPS 的文章已经数都数不过来了吧,厚着脸皮,整理下读书笔记,结合平常项目的实践,也来聊聊 HTTPS. 一.为什么需要 HTTPS? 众所周知,HTTP 协议具有无连接.不可靠. ...
- 解决github打不开问题
2020.06.22 使用以下方式: 在https://github.com.ipaddress.com/找到: 在https://fastly.net.ipaddress.com/github.gl ...
- 一小时彻底搞懂RabbitMQ
windows上面安装rabbitmq-server-3.7.4.exe 首先需要安装otp_win64_20.3.exe 步骤1:安装Erlang RabbitMQ 它依赖于Erlang,需要先安装 ...