首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

web前端常见面试题

[2] 6.事件对象 冒泡与捕获 事件冒泡与捕获事件处理两种机制,主要描述当在一个元素上有两个相同类型事件处理器被激活会发生什么。...在点击子元素时,浏览器运行了两种不同阶段捕获阶段和冒泡阶段。...捕获阶段行为: 浏览器检查元素最外层祖先,是否在捕获阶段注册了一个onclick事件处理程序,如果是,则运行它; 然后,它移动到单击元素下一个祖先元素,并执行相同操作...,然后是单击元素再下一个祖先元素,依此类推,直到到达实际点击元素; 而冒泡与捕获恰恰相反: 浏览器检查实际点击元素是否在冒泡阶段注册了一个onclick事件处理程序,如果是,则运行它; 然后它移动到下一个直接祖先元素...,并做同样事情,然后是下一个,等等,直到它到达元素; 而现代浏览器在默认情况下,所有事件处理程序都在冒泡阶段进行注册

2.3K20
您找到你想要的搜索结果了吗?
是的
没有找到

《现代Javascript高级教程》深入理解事件处理和传播机制

addEventListener方法允许为一个元素同一个事件类型添加多个处理程序,并且可以控制事件捕获阶段。...2.1 事件捕获阶段 事件捕获阶段事件第一个阶段,从根节点开始向下传播到目标元素。在事件捕获阶段事件依次经过每个父元素,直到达到目标元素。...在事件捕获阶段,可以使用addEventListener第三个参数指定事件处理程序捕获阶段执行。...通过在目标元素上注册事件处理程序,可以捕获处理用户触发事件,实现交互功能。 例如,通过在按钮上注册click事件处理程序,可以 在按钮被点击时执行相应代码逻辑。...它利用事件冒泡机制,在父元素上注册一个事件处理程序处理多个子元素相同事件。 例如,可以在父元素上注册click事件处理程序,根据触发事件子元素不同类别执行不同操作。

20140

事件

有传统方式和方法监听方式 传统方式 利用 on 开头事件 onclick, 同一个元素同一个事件只能设置一个处理函数,出现多个处理函数的话,后面的会覆盖前面的。...决定监听器触发阶段捕获阶段还是冒泡阶段详见。 addEventListener() 是 W3C DOM 规范中提供注册事件监听器方法。...例如给一个 div 注册事件: DOM 事件流分为 3 个阶段捕获阶段 当前目标阶段 冒泡阶段 事件捕获:网景最早提出,由 DOM 最顶层节点开始,然后逐级向下传播到绑定事件元素接受过程。...> alert(4); //点击按钮后,弹出顺序1、2、3、4 addEventListener(type, listener[, useCapture])第三个参数默认是 false,表示在冒泡阶段调用事件处理程序...,如果是 true,则表示在事件捕获阶段调用事件处理程序

1.3K20

JavaScript笔记(16)之事件高级

事件高级 今天学习事件高级,下面是我们学习目标 注册事件概述 给元素添加事件,称为注册事件或者绑定事件 注册事件有两种方法:传统方式和方法监听注册方式 传统注册方式 利用on开头事件...onclick btn.onclick = function() {} 特点:注册事件唯一性 同一个元素同一个事件只能设置一个处理函数,最后注册处理函数将会覆盖前面注册处理函数(比如说写两次btn.onclick...比如我们给div注册了点击事件: DOM事件分为三个阶段: 捕获阶段 当前目标阶段 冒泡阶段 事件冒泡: IE最早提出,事件开始时由最具体元素接收,然后逐级向上传播到DOM最顶层节点过程 事件捕获...注意: JS代码只能执行捕获或者冒泡其中一个阶段 onclick和attachEvent只能得到冒泡阶段 addEventListener(type,listener[, useCapture])...第三个参数是true,表示在事件捕获阶段调用事件处理程序;如果是false,(不写默认就是false),表示事件在冒泡阶段调用事件处理程序.

47010

React 进阶 - 事件系统

比如: 给元素绑定事件,不是真正事件处理函数 在冒泡 / 捕获阶段绑定事件,也不是在冒泡 / 捕获阶段执行事件处理函数拿到事件源 e ,也不是真正事件源 e React 为什么要写出一套自己事件系统呢...,由于 React 事件源 e 也是独立组建,所以 preventDefault 也是单独处理 # 事件合成 React 事件系统组成 事件合成系统,初始化会注册不同事件插件 在一次渲染过程...-> 捕获阶段 -> 冒泡阶段 但是老版本事件系统,一定程度上,不符合事件执行时机,但是在新版本 v18 事件系统,这个问题得以解决。...新版本顺序:捕获阶段 -> 事件监听 -> 冒泡阶段 # 事件绑定 在 React 新版事件系统,在 createRoot 会一次向外层容器上注册完全部事件: // react-dom/client.js...经过这第一步,在初始化阶段,就已经注册了很多事件监听器了。 此时如果发生一次点击事件,就会触发两次 dispatchEvent : 第一次捕获阶段点击事件; 第二次冒泡阶段点击事件

1.1K10

事件高级

DOM 事件流会经历3个阶段捕获阶段 当前目标阶段 冒泡阶段 我们向水里面扔一块石头,首先它会有一个下降过程,这个过程就可以理解为从最顶层向事件发生最具体元素(目标点)捕获过程...事件发生时会在元素节点之间按照特定顺序传播,这个传播过程即DOM事件流。 注意 1. Js代码只能执行捕获或者泡其中一个阶段。 2. onclick和attachEvent 只能得到冒泡阶段。...3. addEventlistener (type, listener[, useCapture])第三个参数如果是true,示在事件捕 获阶段调用事件处理程序;如果是false (不写默认就是false...), 表示在事件冒泡阶段调用事件处理 程序。...说白了就是,不给子元素注册事件,给父元素注册事件,把处理代码在父元素事件执行。 生活代理: 咱们班有100个学生,快递员有100个快递, 如果一个个送花费时间较长。

1.5K41

第9章 JavaScript事件处理

事件处理程序在JavaScript调用 <script language="javascript...2.<em>事件</em><em>处理</em><em>程序</em>在HTML<em>中</em><em>的</em>调用 在HTML<em>中</em>调用<em>事件</em><em>处理</em><em>程序</em>,只需要在HTML标签<em>中</em>添加相应<em>的</em><em>事件</em>,并在其中指定要执行<em>的</em>代码或是函数名即可。...注意:目前除IE外,其他主流浏览器<em>如</em>Firefox、Opera、Safari都支持标准<em>的</em>DOM<em>事件</em><em>处理</em>模型。IE仍然使用自己<em>的</em>模型,即冒泡型。 9-4 常用<em>的</em>鼠标<em>事件</em>有哪些?...', observer); // 移除<em>事件</em>监听器 DOM标准: // 第一个参数是<em>事件</em>名称,第二个参数 observer 是回调<em>处理</em>函数,第三个参数注明该回调<em>处理</em>函数是在<em>事件</em>传递过程<em>中</em><em>的</em><em>捕获</em><em>阶段</em>被调用还是冒泡<em>阶段</em>被调用...,默认true为<em>捕获</em><em>阶段</em> element.addEventListener('click', observer, useCapture); // <em>注册</em><em>事件</em>监听器(既支持<em>注册</em>冒泡型<em>事件</em>,又支持<em>捕获</em>型<em>事件</em>。

1K20

深入理解事件

事件事件是用户或浏览器自身执行某种动作, click,load 和mouseover 都是事件名字。响应某个事件函数叫做事件处理函数 / 事件处理程序 / 事件句柄。...并非所有的事件都会经过冒泡阶段 。所有的事件都要经过捕获阶段和处于目标阶段,但是有些事件会跳过冒泡阶段,获得输入焦点focus事件和失去输入焦点blur事件。 5....由于outC是我们触发事件目标对象,在outC上注册几个事件处理函数都属于DOM事件目标阶段。...至此我们可以给出事件函数执行顺序结论了: 捕获阶段处理函数最先执行,其次是目标阶段处理函数,最后是冒泡阶段处理函数。目标阶段处理函数如果有多个,则先注册先执行,后注册后执行。 6....阻止事件冒泡和捕获 默认情况下,多个事件处理函数会按照DOM事件流模型顺序执行。如果子元素上发生某个事件,不需要执行父元素上注册事件处理函数,那么我们可以停止捕获和冒泡,避免没有意义函数调用。

81740

事件高级

事件捕获: 网景最早提出,由 DOM 最顶层节点开始,然后逐级向下传播到到最具体元素接收过程。  DOM 事件流分为3个阶段:  1. 捕获阶段 2. 当前目标阶段 3....事件发生时会在元素节点之间按照特定顺序传播,这个传播过程即 DOM 事件流。 注意   1. JS 代码只能执行捕获或者冒泡其中一个阶段。   ...3. addEventListener(type, listener[, useCapture])第三个参数如果是 true,表示在事件捕 获阶段调用事件处理程序;如果是 false(不写默认就是false...),表示在事件冒泡阶段调用事件处理 程序。   ...什么是事件委托 把事情委托给别人,代为处理事件委托也称为事件代理,在 jQuery 里面称为事件委派。 说白了就是,不给子元素注册事件,给父元素注册事件,把处理代码在父元素事件执行。

1.2K10

JavaScript——DOM事件高级

同一个元素同一个事件只能设置一个处理函数,最后注册处理函数将会覆盖前面注册处理函数。...事件流描述是从页面接收事件顺序。...DOM事件流分为3个阶段捕获阶段 当前目标阶段 冒泡阶段 比如我们给一个div注册了点击事件事件冒泡:IE最早提出,事件开始时由最具体元素接收,然后逐级向上传播到DOM最顶层节点过程。...注意: JS代码只能执行捕获或者冒泡其中一个阶段。 onclick和 attachEvent只能得到冒泡阶段。...如果 addEventListener 第三个参数是true,表示在事件捕获阶段调用事件处理程序;如果是false(默认是false),表示在事件冒泡阶段调用事件处理程序

1.8K10

JavaScript(十二)

DOM 事件流 “DOM2 级事件”规定事件流包括三个阶段: 事件捕获阶段 处于目标阶段 事件冒泡阶段 首先发生事件捕获,为截获事件提供了机会。然后是实际目标接收到事件。...最后一个阶段是冒泡阶段,可以在这个阶段事件做出响应。 事件处理程序 ---- 事件就是用户或浏览器自身执行某种动作。 click、load 和 mouseover,都是事件名字。...) { alert("Clicked"); }; 以这种方式添加事件处理程序会在事件冒泡阶段处理。...3 个参数: 要处理事件名 作为事件处理程序函数 一个布尔值 最后这个布尔值参数如果是 true,表示在捕获阶段调用事件处理程序,如果是 false,表示在冒泡阶段调用事件处理程序。...DOM 事件对象 兼容 DOM 浏览器会将一个 event 对象传入到事件处理程序,无论指定事件处理程序时使用什么方法: var btn = document.getElementById("

2.9K20

【前端 · 面试 】JavaScript 之你不一定会基础题(二)

] 事件捕获事件冒泡 当一个事件发生在具有父元素元素上(例如,在我们例子是 child 元素)时,现代浏览器运行两个不同阶段 - 捕获阶段和冒泡阶段。...在捕获阶段: 浏览器检查元素最外层祖先,是否在捕获阶段注册了一个onclick事件处理程序,如果是,则运行它。...在冒泡阶段,恰恰相反: 浏览器检查实际点击元素是否在冒泡阶段注册了一个onclick事件处理程序,如果是,则运行它 然后它移动到下一个直接祖先元素,并做同样事情,然后是下一个,等等,直到它到达<...这两个阶段如下图所示: [bubbling-capturing] 在现代浏览器,默认情况下,所有事件处理程序都在冒泡阶段进行注册,这也是为什么只有一个阻止冒泡方法方法 event.stopPropagation...针对问题二,虽然 child 注册捕获阶段执行事件,但是 parent 事件流程捕获根本走不到它,所以答案应该是:只弹出“parent 事件触发,parent”。

53610

事件高级

事件侦听注册事件 addEventListener   // (1) 里面的事件类型是字符串 必定加引号 而且不带on   // (2) 同一个元素 同一个事件可以添加多个侦听器(事件处理程序)...最终,w3c 采用折中方式,平息了战火,制定了统一标准 —--— 先捕获再冒泡。 现代浏览器都遵循了此标准,所以当事件发生时,会经历3个阶段。...DOM 事件流会经历3个阶段捕获阶段 当前目标阶段 冒泡阶段 我们向水里面扔一块石头,首先它会有一个下降过程,这个过程就可以理解为从最顶层向事件发生最具体元素(目标点)捕获过程...事件对象兼容性处理 事件对象本身获取存在兼容问题: 标准浏览器是浏览器给方法传递参数,只需要定义形参 e 就可以获取到。...说白了就是,不给子元素注册事件,给父元素注册事件,把处理代码在父元素事件执行。 生活代理: ? js事件代理: ?

1.3K20

javascript 事件基础

一:事件流       事件流描述是从页面接收事件顺序。  ...2个方法,用于处理指定和删除事件处理程序操作,addEventListener()和removeEventListener()。...eventPhase Integer 调用事件处理程序阶段:1表示捕获阶段,2表 示“处于目标”,3表示冒泡阶段 preventDefault() Function 取消事件默认行为。...如果cancelable是 true,则可以使用这个方法 stopImmediatePropagation() Function 取消事件进一步捕获或冒泡,同时阻止任何 事件处理程序被调用 stopPropagation...currentTarget就是指被点击那个元素,但是target是当前点击目标元素, 如上代码,由于btn上并没有注册事件,结果click事件就冒泡到了document.body,在那里事件才得到了处理

92450

事件

事件规定事件流包括三个阶段事件捕获阶段,处于目标阶段事件冒泡阶段,首先发生事件捕获,为截取事件提供机会,然后是实际目标接收事件,最后是冒泡阶段 ?...我们可以在button事件处理程序调用stopPropagation()从而避免注册在body上事件发生 var handler = function (e) { alert(e.type...最后这个布尔值参数如果是true,表示在捕获阶段调用事件处理程序;如果是false,表示在冒泡阶段调用事件处理程序。...参数个数不相同,这个最直观,addEventListener有三个参数,attachEvent只有两个,attachEvent添加事件处理程序只能发生在冒泡阶段,addEventListener第三个参数可以决定添加事件处理程序是在捕获阶段还是冒泡阶段处理...: e.stopPropagation(); event.stopPropagation(): 阻止捕获和冒泡阶段当前事件进一步传播。

1.3K30

DOM事件传播机制

引言--DOM事件传播机制是指当一个事件在DOM树触发时,它是如何在各个元素之间传播。DOM事件传播机制分为三个阶段捕获阶段、目标阶段和冒泡阶段。...DOM事件流分为三个阶段捕获阶段、目标阶段和冒泡阶段捕获阶段事件从最外层节点开始传播,逐级向下,直到达到目标节点。在捕获阶段事件会依次触发每个经过节点上绑定捕获事件处理函数。...事件冒泡流事件冒泡是指在DOM树事件从目标元素开始向上冒泡传播过程。也就是说,在冒泡阶段事件会依次触发父级元素相同类型事件处理程序。...事件捕获事件捕获是指在DOM树事件从最外层父级元素开始向下捕获传播过程。也就是说,在捕获阶段事件会依次触发父级元素相同类型事件处理程序。...这样一来,无论我们添加或删除列表项,只需要在父级元素上绑定一个事件处理程序即可。总结--通过以上介绍,我们了解了DOM事件传播机制三个阶段捕获阶段、目标阶段和冒泡阶段

15730

事件机制

事件传播分为三个阶段捕获(Capture):事件对象从window对象传递到目标对象过程。 目标(target):目标节点在处理事件过程。...是布尔值useCapture参数情况下,默认值为false,表示注册事件是冒泡事件,为true时表示注册事件捕获事件。...调用stopPropagation严格来说不是阻止冒泡,是阻止事件传播,所以在捕获阶段也可以阻止。...事件代理处理方式有以下优点: 节省内存 不需要给子节点注销事件 React事件机制 React事件机制与原生完全不同,时间没有绑定在原生DOM上,发出事件也是对原生事件包装。...事件注册 React组件在组件加载(mount)和更新(update)时,其中ReactDOMComponent会对传入事件属性进行处理(_updateDOMProperties),对相关事件进行注册和存储

77811

JavaScript事件机制实现一些理解

这种传播分成三个阶段捕获阶段事件从window对象自上而下向目标节点传播阶段; 目标阶段:真正目标节点正在处理事件阶段; 冒泡阶段事件从目标节点自下而上向window对象传播阶段。...事件监听 EventTarget.addEventListener() addEventListener()基本上有三个参数,分别是「事件名称」、「事件处理程序」(事件触发时执行function),...使用这种方式来注册事件好处是:同一个元素同种事件可以绑定多个函数,按照绑定顺序执行。...假如上述列表元素当中添加了其他元素(:a、span等),我们不必再一次循环给每一个元素绑定事件,直接修改事件代理事件处理函数即可。 冒泡还是捕获?...对于事件代理来说,在事件捕获或者事件冒泡阶段处理并没有明显优劣之分,但是由于事件冒泡事件流模型被所有主流浏览器兼容,从兼容性角度来说还是建议大家使用事件冒泡模型。

51030
领券