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 的区别

mouseovermouseout 的移入移出会向上传播

mouseentermouseleave 的移入移出不会向上传播

浏览器默认行为

​ 不需要绑定, 浏览器天生自带的一个行为

表单提交: 不需要绑定提交时间, 只要点击 submit 按钮, 会自动提交跳转页面

a 超链接: 不需要绑定点击事件, 只要点击 a 标签就会跳转连接

鼠标右键: 不需要绑定右键单击事件, 只要你单击鼠标右键, 就会出现一个菜单

文本选中: 不需要绑定选中事件, 只要你框选, 就会选中页面中的文本内容

阻止浏览器默认行为

1. e.preventDefault() 标准浏览器

2. e.returnValue = false IE 低版本

3.通用的方法 return false

JavaScript 基础 学习 (四)的更多相关文章

  1. JavaScript基础学习(四)—Object

    一.Object的基本操作 1.对象的创建      在JavaScript中,创建对象的方式有两种:构造函数和对象字面量.      (1)构造函数 var person = new Object( ...

  2. JavaScript 基础学习1-day14

    JavaScript 基础学习1 知识预览JavaScript概述二 JavaScript的基础三 JavaScript的对象BOM对象DOM对象实例练习js扩展 JavaScript概述 JavaS ...

  3. JavaScript 基础 学习(三)

    JavaScript 基础 学习(三) 事件三要素 ​ 1.事件源: 绑定在谁身上的事件(和谁约定好) ​ 2.事件类型: 绑定一个什么事件 ​ 3.事件处理函数: 当行为发生的时候,要执行哪一个函数 ...

  4. 48.javascript基础学习

    javascript基础学习:   http://www.w3school.com.cn/jsref/index.asp jS的引入方式: 1.行间事件:为某一个具体的元素标签赋予js内容,oncli ...

  5. JavaScript 基础学习(二)js 和 html 的结合方式

    第一种 使用一个标签 <script type="text/javascript"> js代码; </script> 第二种 使用 script 标签,引入 ...

  6. Python基础学习四

    Python基础学习四 1.内置函数 help()函数:用于查看内置函数的用途. help(abs) isinstance()函数:用于判断变量类型. isinstance(x,(int,float) ...

  7. JavaScript 基础 学习 (二)

    JavaScript 基础 学习 节点属性 ​ 每一个节点都有自己的特点 ​ 这个节点属性就记录着属于自己节点的特点 1. nodeType(以一个数字来表示这个节点类型) ​ 语法:节点.nodeT ...

  8. JavaScript 基础 学习 (一)

    JavaScript 基础 学习 获取页面中的元素的方法 作用:通过各种方式获取页面中的元素 ​ 比如:id,类名,标签名,选择器 的方式来获取元素 ​ 伪数组: ​ 长的和数组差不多,也是按照索引排 ...

  9. 几张非常有意义的JavaScript基础学习思维图

    分享几张对于学习JavaScript基础知识非常有意义的图,无论你的JavaScript级别如何,“温故而知新”完全可以从这些图中得到. 推荐理由:归类非常好,非常全面 JavaScript 数组 J ...

随机推荐

  1. centos7搭建EFK

    环境: system: CentOS Linux release 7.7.1908 elasticsearch: elasticsearch-7.5.1-1.x86_64 kibana: kibana ...

  2. 简单梳理JavaScript垃圾回收机制

    JavaScript具有自动垃圾回收机制,即执行环境会负责管理代码执行过程中使用地内存. 这种垃圾回收机制的原理很简单:找出那些不再继续使用的变量,然后释放其占用的内存.为此,垃圾收集器会按照固定的时 ...

  3. python的坑--你知道吗?

    python的坑--你知道吗? 1.列表的坑 坑的地方是:因为列表用pop之后,后面的索引都会自动减一 # 列表的坑之一 list1 = ['python','java','php','c','c++ ...

  4. k8s的两种网络方案与多种工作模式[flannel与calico]

    k8s的两种网络方案与多种工作模式 1. Flannel: flannel有三种工作模式: 1. vxlan(隧道方案) 2. host-gw(路由方案) 2. udp(在用户态实现的数据封装解封装, ...

  5. Azure Monitor(一)Application Insights

    一,引言 Azure Monitor 是 Azure 中的一项完整堆栈监视服务,是一种收集和分析遥测数据的服务.它提供了一组完整的功能来监视 Azure 资源以及其他云中和本地的资源.Azure Mo ...

  6. Python3-paramiko模块-基于SSH的远程连接模块

    Python3中的paramiko模块,基于SSH用于连接远程服务器并执行相关操作 http://docs.paramiko.org/en/2.1/ SSHClient 用于连接远程服务器并执行基本命 ...

  7. 关于SPSS Modeler18 提示:用于定义的观测值的字段的值无效

    今天在做实验的时候,按照实验步骤严格设置了参数,当运行节点的时候,一直提示:用于定义的观测值的字段的值无效,如下图 我把我的流文件发给同学,同学的机器上是可以运行的,但是我的不行,不知道什么原因,有知 ...

  8. Exception in thread "main" java.lang.IllegalArgumentException: java.net.URISyntaxException: Relative path in absolute URI: ${system:java.io.tmpdir%7D/$%7Bsystem:user.name%7D

    问题原因是Hive里面配置的相对路径没有找到,我们可以直接在文件里面修改为绝对路径. 1.在hive下面窗口temp文件夹 cd /opt/hive mkdir temp cd temp 2.查看te ...

  9. Digix2019华为算法精英挑战赛代码

    Digix2019华为算法精英挑战赛代码 最终成绩: 决赛第九 问题 根据手机型号,颜色,用户偏好,手机APP等信息预测用户年龄. https://developer.huawei.com/consu ...

  10. js基础练习题(3)

    8.this 1.举例说说apply方法和call方法的作用和区别 2.读下面代码,写程序结果 function identify () { return this.name.toUpperCase( ...