×

addEventListener 第三个参数_addeventlistener第三个参数

前端技术网 前端技术网 发表于2024-01-18 20:43:56 浏览3125 评论0

抢沙发发表评论

一、addEventListener和普通.onclick的区别

addEventListener是在 FireFox上的用法。

addEventListener的参数一共有三个,语法为:

addEventListener 第三个参数_addeventlistener第三个参数

element.addEventListener(type,listener,useCapture)

详解

其中element是要绑定函数的对象。

type是事件名称,要注意的是"onclick"要改为"click","onblur"要改为"blur",也就是说事件名不要带"on"。

listener当然就是绑定的函数了,记住不要跟括号

最后一个参数是个布尔值,表示该事件的响应顺序,下面重点介绍一下addEventListener的第3个参数(useCapture)。

addEventListener 第三个参数_addeventlistener第三个参数

userCapture若为true,则浏览器采用Capture,若为false则采用bubbing方式。建议用false

区别:

varbtn1Obj=document.getElementById("btn1");

//element.addEventListener(type,listener,useCapture);

btn1Obj.addEventListener("click",method1,false);

btn1Obj.addEventListener("click",method2,false);

btn1Obj.addEventListener("click",method3,false);

执行顺序为method1->method2->method3

document.getElementById("btn").onclick=method1;

document.getElementById("btn").onclick=method2;

document.getElementById("btn").onclick=method3;

如果这样写,那么将会只有medhot3被执行

二、addEventListener()第三个参数设置为true和false的区别

第三个参数决定了事件的传播方式:

为 false时,采用冒泡模式,为 true时,采用捕获模式。默认值为false。

这里涉及到的知识点为: JS事件流。

JS事件流分为三个阶段:捕获阶段,目标阶段,冒泡阶段。

如果你设置了捕获(true)阶段执行事件,那么在目标阶段执行完后就停止了,不会走冒泡。

更多具体的相关知识需要你自己去看书或文档了

三、addEventListener的第三个参数到底该怎么设置

从官方文档看,addEventListener方法使用如下:

主要关注下第三个参数,可以设置为bool类型(useCapture)或者object类型(options)。

removeEventListener的参数与addEventListener类似:

在移除之前添加的监听事件时,很显然需要传入同样的type和listener,那第三个参数options和useCapture呢?

只会检查addEventListener的useCapture或options中的capture值。

例如:

当DOM元素与事件拥有不同的生命周期时,倘若不remove掉eventListener就有可能导致内存泄漏(保留或增加了不必要的内存占用)。比如在单页应用中,切换了页面后,原组件已经卸载,但其注册在document上的事件却保留了下来,白白占用了内存空间。所以removeEventlister与addEventListener成对儿出现是best practice,可以避免可能出现的内存泄漏问题。

四、addeventlistener是什么意思

addEventListener是一个侦听事件并处理相应的函数。

参数

1、type:String

事件的类型。

2、listener:Function

侦听到事件后处理事件的函数。此函数必须接受 Event对象作为其唯一的参数,并且不能返回任何结果,如以下示例所示:访问修饰符function

函数名(evt:Event):void

3、useCapture:Boolean(default= false)

这里牵扯到“事件流”的概念。侦听器在侦听时有三个阶段:捕获阶段、目标阶段和冒泡阶段。顺序为:捕获阶段(根节点到子节点检查是否调用了监听函数)→目标阶段(目标本身)→冒泡阶段(目标本身到根节点)。此处的参数确定侦听器是运行于捕获阶段、目标阶段还是冒泡阶段。

如果将 useCapture设置为 true,则侦听器只在捕获阶段处理事件,而不在目标或冒泡阶段处理事件。如果useCapture为

false,则侦听器只在目标或冒泡阶段处理事件。要在所有三个阶段都侦听事件,请调用两次 addEventListener,一次将 useCapture设置为

true,第二次再将useCapture设置为 false。

4、priority:int(default= 0)

事件侦听器的优先级。优先级由一个带符号的 32位整数指定。数字越大,优先级越高。优先级为 n的所有侦听器会在优先级为 n-1

的侦听器之前得到处理。如果两个或更多个侦听器共享相同的优先级,则按照它们的添加顺序进行处理。默认优先级为 0。

5、useWeakReference:Boolean(default= false)

确定对侦听器的引用是强引用,还是弱引用。强引用(默认值)可防止您的侦听器被当作垃圾回收。弱引用则没有此作用。

OK,本文到此结束,希望对大家有所帮助。