DOM-7 【兼容】事件处理函数、冒泡捕获、阻止冒泡默认事件

事件处理函数

  • 绑定事件 = 绑定事件的处理函数(事件本身是存在的,绑定的是相应的反馈)
  • 事件 + 事件的反馈 = 前端交互 (前端核心)

绑定事件的方式

1. 句柄绑定

  • 默认(只能)是事件冒泡这种事件流
  • 为某一个元素(事件源)指定了一个事件句柄(onclick,事件发生时要进行的操作)
oDiv.onclick = function(){} // 事件句柄 = 处理函数
  • onclick绑定的事件处理函数内写的其他函数,在非严格模式下,指向的是window
  • 【该方式】一个元素、同一事件、只能绑定一个事件处理函数(绑定多个取最后)
    在这里插入图片描述

2. 内联事件监听器

在html上绑定,绑定执行(不建议使用,结构和逻辑应当分离),这种按属性绑定的方式优先级更低,会被js覆盖
在这里插入图片描述在这里插入图片描述

3. 事件监听器

1) W3C规范,但IE9以下不支持

  • 注册事件监听器/绑定事件监听器
  • 可以绑定多个事件处理函数,都能执行;如果绑定了多次同一事件处理函数,只会执行一次
  • 注意:事件类型没有加on
elem.addEventListener(事件类型,事件处理函数,false);//false事件冒泡  true事件捕获
// 2种都执行
oBtn.addEventListener('click',function(){this.innerHTML = '加载中..'
},false)
oBtn.addEventListener('click',function(){console.log('加载更多事件')
},false)
oBtn.addEventListener('click',test,false);
oBtn.addEventListener('click',test,false);
function test(){console.log(1); // 打印1次
}

2)IE8及以下绑定方法

elem.attachEvent(事件类型,事件处理函数);
  • 注意:事件类型加on
    在这里插入图片描述
    在这里插入图片描述

点击事件 + IIFE

  • 在绑定时,console.log(i)并没有执行,i没有保存,绑定的函数在for循环结束后被执行(点击了),访问到的是5
var oLi = document.getElementsByTagName('li'),len = oLi.length,item;
for (var i = 0; i < len; i++) {(function (j) {item = oLi[i];item.addEventListener('click', function () {console.log(i);}, false);}(i))
}

3) 事件处理程序的运行环境 / this

  • 谁调用this就指向谁(attachEven是个特例,this指向window)
    在这里插入图片描述

4) 【兼容】封装绑定事件处理函数

function addEvent(el, type, fn) {if (el.addEventListener) {el.addEventListener(type, fn, false);} else if (el.attachEvent) {el.attachEvent('on' + type, function () {fn.call(el);})} else {el['on' + type] = fn}
}

5)解除事件处理程序

// 句柄
element.onclick=null/false;// W3C规范事件监听器 (add时怎么写remove就得怎么写)
element.addEventListener('click',test,false);
element.removeEventListener('click',test,false)// IE8及以下事件监听器
element.detachEvent('onclick',test);
  • 非严格模式下可以使用方法4
    在这里插入图片描述
    在这里插入图片描述
function removeEvent(elem, type, fn) {if (elem.addEventListener) {elem.removeEventListener(type, fn, false)} else if (elem.attachEvent) {elem.detachEvent('on' + type, fn)} else {elem['on' + type] = null}
}

标签嵌套

  • 内联元素写嵌套关系,dom解析出来依然不是嵌套的
  • a的特殊现象,变成block依然不能嵌套
    在这里插入图片描述
    在这里插入图片描述

事件冒泡与捕获

  • dom结构中/嵌套结构中,从内到外,从下到上,事件从子元素一层一层向上传递的现象是事件冒泡
  • 需绑定相同事件,向上传递时,父级有相同事件则触发
  • 关心的是事件,而非事件处理函数
  • 事件捕获则顺序相反,点击父元素,一直捕获到事件源,事件监听器true
  • 注意:dom结构嵌套,视觉上并不一定嵌套
  • 点击黄色:事件捕获先于事件冒泡执行
    在这里插入图片描述
  • 点击红色,红色是事件源,事件源是按绑定顺序先后执行的,非冒泡非捕获
    在这里插入图片描述
  • focus、blur、change、submit、reset、select这些是没有捕获和冒泡事件的
  • IE浏览器是没有事件捕获的,除了Chrome以外的老版本浏览器都没有捕获,新版的浏览器(火狐、欧朋)有捕获的,主要和webkit blink内核有关系

取消冒泡

1. e.stopPropagation() (W3C)

在这里插入图片描述

2. e.cancelBuble = true (IE)

  • attach的怎么取消
    在这里插入图片描述

3. 【兼容】封装

function cacelBubble(e) {var e = e || window.event;if (e.stopPropagation) {e.stopPropagation();} else {e.cancelBubble = true;}
}

取消默认事件

1. 阻止右键菜单弹出

1)阻止右键菜单弹出

在这里插入图片描述

2)W3C:e.preventDefault()(IE9不兼容)

在这里插入图片描述

3)e.returnValue = false

在这里插入图片描述

function preventDefaultEvent(e) {var e = e || window.event;if (e.preventDefault) {e.preventDefault()} else {e.returnValue = false}
}

2. a标签默认事件

  • 跳转和刷新页面
// 1)void(0)相当于return 0
<a href = "javascript:void(0)">百度一下</a>
// 2)
<a href = "javascript:;">百度一下</a>
// 3)锚点方式
<a href = "#">百度一下</a> 
// 4)
a.onclick = function(e){e.preventDefault();
}

举例

在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/251101.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

DOM-8 【兼容】冒泡捕获流、事件与事件源对象、事件委托

事件流 1. 含义 描述从页面中接收事件的顺序 2. 分类 IE提出的 事件冒泡流 Event BubblingNetscape提出的 事件捕获流 Event Capturing 3. 阶段 事件捕获阶段 处于目标阶段 事件冒泡阶段 事件捕获先于事件冒泡执行 dom dom0&#xff1a;定义句柄方式&#xff0c;兼…

IIS6.0,Apache低版本,PHP CGI 解析漏洞

IIS6.0解析漏洞 在IIS6.0下存在这样的文件“名字.asp;名字.jpg” 代表了jpg文件可以以asp脚本类型的文件执行。 根据这个解析漏洞我们可以上传这种名字类型的图片&#xff0c;比如 1.asp;xxx.jpg 他会忽略;后边的内容&#xff0c;所以文件相当于1.asp asp一句话木马 <%eval …

UVA 3485 Bridge

题目大意 你的任务是修建一座大桥。桥上等距地摆放着若干个塔&#xff0c;塔高为H&#xff0c;宽度忽略不计。相邻两座塔之间的距离不能超过D。塔之间的绳索形成全等的对称抛物线。桥长度为B&#xff0c;绳索总长为L&#xff0c;如下图所示求建最少的塔时绳索的最下端离地的高度…

ES5-拓展 this指向的总结

每个函数在执行时都有自己的this指向 1. 默认绑定规则&#xff1a; 全局中&#xff0c;this指向window this window函数的独立调用&#xff0c;this默认指向window &#xff08;不要把独立调用理解成window调用&#xff09; // 函数在全局中调用&#xff0c;也就是被window调…

国内初创企业选择云计算服务器价格对比

假设我们是一家初创企业&#xff0c;现在要选择第一台服务器。业务还未确定&#xff0c;只知道是互联网业务 要求&#xff1a; 至少2核&#xff0c;否则多线程的软件都跑不了至少4G内存&#xff0c;这样可以运行数据库或者elasticsearch这种比较吃内存的东西。或者说&#xff0…

ES5-拓展 箭头函数的this、this的优先级

让内部函数的this指向和父函数的this&#xff0c;可以显示改变this指向&#xff0c;也可以使用箭头函数 箭头代替了function关键字 箭头函数内部没有this指向&#xff0c;箭头函数的this是稳定引用父作用域的。因为它的存在就是要稳定this指向。 适用于普通函数的所有绑定规则…

java 实现压缩单个文件

先来实现一个简单的单文件压缩&#xff0c;主要是为了解一下压缩需要使用到的流。。 效果&#xff1a; 说明&#xff1a;压缩实现使用ZipOutputStream 代码&#xff1a; package com.gx.compress;import java.io.BufferedInputStream; import java.io.BufferedOutputStream; im…

jekins构建触发器详解

jenkins版本&#xff1a;2.89.2 1、触发远程构建 (例如,使用脚本)&#xff1a;通过一个网址的访问来触发构建&#xff0c;这样就不需要登录jenkins系统也能触发构建了。 示例地址&#xff1a; http://localhost:8848/job/FlashRegistration/build??token口令&cause书写构…

ES5-拓展 隐式数据类型转换

Boolean转换原则&#xff1a;非假即真 6种虚值 原始值转换为原始值 对象转换为原始值 Date()和new Date() new Date可以不写括号(new方式返回的一定是对象)&#xff0c;返回Date对象Date()返回函数执行&#xff0c;返回时间字符串 引用值转原始值 先找valueOf方法(一般…

Swagger的简单入门【转载】

一、Swagger简介 上一篇文章中我们介绍了Spring Boot对Restful的支持&#xff0c;这篇文章我们继续讨论这个话题&#xff0c;不过&#xff0c;我们这里不再讨论Restful API如何实现&#xff0c;而是讨论Restful API文档的维护问题。 在日常的工作中&#xff0c;我们往往需要给前…

visual studio code搭建本地服务器(node.js+express)

一、安装node.js&#xff08;常规软件安装流程&#xff0c;比较简单&#xff0c;不用赘述&#xff09; 二、安装express框架 1. 打开Windows命令提示符&#xff0c;输入&#xff1a; npm install express -g&#xff0c;等待&#xff0c;安装好如下所示&#xff1a; npm instal…

chrome调试

技术拓展直播课8 按chrome的官方文档 长按刷新 清除缓存&#xff08;不一定好使&#xff09; Ctrl f 查找类 console控制台见b站 bilibili source面板直接打断点 效果和debugger一样 单步调试 进入到函数的下一步 网速 no throttling 是否需要过滤 domcontentloaded d…

61-1 认识webpack

认识webpack 面向过程开发的不便引入外部js执行顺序面向对象开发 加载多个文件耗时更多 增加了http请求 引入过多js变量来源不明 优化 使用前先import 但使用import语法需要借助工具webpack翻译为浏览器可以解析的语法安装node自动携带npmwebpack若没有全局安装 需要使用npx…

css font简写

一、字体属性主要包括下面几个 font-family&#xff0c;font-style&#xff0c;font-variant&#xff0c;font-weight&#xff0c;font-size&#xff0c;fontfont-family&#xff08;字体族&#xff09;: “Arial”、“Times New Roman”、“宋体”、“黑体”等;font-style&…

javascript --- 原生的拖拽功能实现

准备一个方块: <style>.drag{background-color:#aaf;position:absolute;} </style> <div class"drag" style"width:100px;height:100px;top:0;left:0"></div>监听鼠标的按住事件: let dragDiv document.getElementsByClassName…

web安全学习-验证机制存在的问题

验证机制是应用程序防御恶意攻击的中心机制。它处于防御未授权的最前沿&#xff0c;如果用户能够突破那些防御&#xff0c;他们通常能够控制应用程序的全部功能&#xff0c;自由访问其中的数据。缺乏安全稳定的验证机制&#xff0c;其他核心安全机制&#xff08;如回话管理和访…

ES5-拓展 原型链、继承、类

Symbol不是构造函数 Object不是原型是实例对象 他的构造器继承原型上的构造器 undefined是未定义 null是空指针 一、原型链 1. 函数也是实例对象 2. 构造函数Object是由Function构造出来的 3. 有一种说法是&#xff0c;原型链的终点是null Object.prototype.__proto__指向nul…

spring boot 加载application配置文件

这就要注意了 转载于:https://www.cnblogs.com/huochaihe/p/9397849.html

javascript --- 防抖与节流

先做一个监听鼠标移动的base: <style>#content{height:150px;width:200px;text-align:center;color:#fff;background-color:#ccc;font-size: 70px;} </style> <div id"content"></div> <script>let content document.getElementById…

DOM-9 【实战】模块化开发Todolist(面向过程)

模块化分类 按dom结构划分按功能划分&#xff08;组件化开发&#xff09; 模块与模块之间可以相互依赖&#xff0c;但互不影响 模块&#xff1a;IIFE赋值给一个变量&#xff0c;当引入模块时&#xff0c;IIFE会立即执行 单标签闭合才符合W3C规范display、position放在上面css是…