iis服务器助手广告广告
返回顶部
首页 > 资讯 > 前端开发 > JavaScript >关于js中removeEventListener取消事件监听的坑
  • 488
分享到

关于js中removeEventListener取消事件监听的坑

2024-04-02 19:04:59 488人浏览 八月长安
摘要

从addEventListener说起,上代码 onMounted(() => { window.addEventListener("click", ()=>{

从addEventListener说起,上代码

onMounted(() => {
    window.addEventListener("click", ()=>{
        doSth(param)//param为参数
    })
})

addEventListener有一个箭头函数回调函数,这个函数本身不能传参(当然event除外),如果你要传参,只能在doSth函数上传,我们也可以将箭头函数回调函数替换成一个函数,但是这个函数明显不能有参数

onMounted(() => {
    window.addEventListener("click", doSth)//这个doSth就没有参数了
})

非要让doSth有参数,可以在函数外面包上一层函数

let doSth1=()=>{
    doSth(param)
}
onMounted(() => {
    window.addEventListener("click", doSth1)//这个doSth1就是外面包装的函数
})

以上的原理都适用于removeEventListener,但是emoveEventListener还有一个注意点,见下

onMounted(() => {
    window.addEventListener("click", () => {
        doSth()
    })
})
onUnmounted(() => {
    window.removeEventListener("click", () => {
        doSth()
    })
})

以上这样的代码是通不过的,因为removeEventListener的第二个参数,也就是那个回调函数必须和addEventListener的回调函数是同一个函数,共享内存,下面这种写法就行得通

onMounted(() => {
    window.addEventListener("click", doSth)
})
onUnmounted(() => {
    window.removeEventListener("click",doSth)
})

然而,上面这种写法还是不能传参,所以要传参的话还是要外包一个函数,如下

let doSth = (str: string) => {
    console.log(str);
}
let doSth1 = () => {
    doSth("haha")
}
 
onMounted(() => {
    window.addEventListener("click", doSth1)
})
onUnmounted(() => {
    window.removeEventListener("click", doSth1)
})

然而,如果你用ts的话,doSth函数的参数可以是一个可选参数,如下

let doSth = (str?: string) => {
    if (typeof str == "string") {
        console.log("传参了");
    } else {
        console.log("没传参");
    }
 
}
onMounted(() => {
    window.addEventListener("click", doSth)
})
onUnmounted(() => {
    window.removeEventListener("click", doSth)
})

这样的情况则会提示一则消息:

没有与此调用匹配的重载。

  第 1 个重载(共 2 个),“(type: "click", listener: (this: Window, ev: MouseEvent) => any, options?: boolean | AddEventListenerOptions | undefined): void”,出现以下错误。

  第 2 个重载(共 2 个),“(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions | undefined): void”,出现以下错误。

当然这样实际运行是可以的,没什么问题,但是报错很难看,解决这个问题又不想在外面包上一层函数,那么可以直接给doSth加上any类型

let doSth: any = (str: string) => {
    if (typeof str == "string") {
        console.log("传参了");
    } else {
        console.log("没传参");
    }
 
}
onMounted(() => {
    window.addEventListener("click", doSth)
})
onUnmounted(() => {
    window.removeEventListener("click", doSth)
})

 当然其中原因还是没能搞懂,唉,慢慢来吧

总结

到此这篇关于js中removeEventListener取消事件监听的文章就介绍到这了,更多相关removeEventListener取消事件监听内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: 关于js中removeEventListener取消事件监听的坑

本文链接: https://www.lsjlt.com/news/166580.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 关于js中removeEventListener取消事件监听的坑
    从addEventListener说起,上代码 onMounted(() => { window.addEventListener("click", ()=>{ ...
    99+
    2024-04-02
  • jquery取消滚动事件监听
    在我们开发Web应用程序时,经常需要监听用户在页面中的滚动行为。这时,我们可以使用jQuery提供的滚动事件来监听用户的滚动操作。但是,在某些情况下,我们需要取消滚动事件的监听,这就需要使用jQuery提供的一些API来实现。下面,我们就来...
    99+
    2023-05-25
  • jquery如何取消双击事件监听
    这篇“jquery如何取消双击事件监听”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“jqu...
    99+
    2024-04-02
  • jQuery如何监听复选框取消选中事件?
    这篇文章将为大家详细讲解有关jQuery如何监听复选框取消选中事件?,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。jQuery监听复选框取消选中事件 jQuery 提供了多种方法来监听复选框取消选中事件。...
    99+
    2024-04-02
  • 关于vue路由监听事件跳转的问题
    目录vue路由监听事件跳转1.监听路由触发事件的语法2.可能遇到的问题vue路由监听不到怎么办方法一方法二方法三vue路由监听事件跳转 1.监听路由触发事件的语法  watch: {...
    99+
    2022-11-13
    vue路由监听 vue路由跳转 vue路由监听事件
  • JavaScript关于某元素点击事件的监听和触发
    目录一. 触发元素同步效果方法一: 原生JavaScript的click()点击事件方法二:JQuery事件 — trigger()方法二. 触发元素...
    99+
    2024-04-02
  • JS添加事件监听的方法是什么
    这篇文章主要介绍“JS添加事件监听的方法是什么”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“JS添加事件监听的方法是什么”文章能帮助大家解决问题。1.我们一般在的事件添加时是这样做的:elm.onc...
    99+
    2023-06-26
  • JavaScript中的事件监听是什么
    这篇文章主要介绍“JavaScript中的事件监听是什么”,在日常操作中,相信很多人在JavaScript中的事件监听是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Ja...
    99+
    2024-04-02
  • javascript中的事件监听有哪些
    这篇文章主要介绍了javascript中的事件监听有哪些的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇javascript中的事件监听有哪些文章都会有所收获,下面我们一起来看看...
    99+
    2024-04-02
  • js如何监听html页面的上下滚动事件
    这篇文章将为大家详细讲解有关js如何监听html页面的上下滚动事件,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。最近在一个项目中,在写前端页面的时候,想像以前做Andro...
    99+
    2024-04-02
  • javascript中事件监听与事件委托的示例分析
    这篇文章主要介绍了javascript中事件监听与事件委托的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。事件监听与事件委托在js中...
    99+
    2024-04-02
  • 详解Vue3中Watch监听事件的使用
    目录一、watch的使用1、引入watch2、多个数据源监听3、监听数组变化4、侦听对象5、结论一、watch的使用 watch(WatcherSource, Callback, [...
    99+
    2023-02-10
    Vue3 Watch监听事件使用 Vue3 Watch监听 Vue3 Watch
  • Java中的事件监听机制是什么
    这篇文章给大家介绍Java中的事件监听机制是什么,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。鼠标事件监听机制的三个方面:1.事件源对象:事件源对象就是能够产生动作的对象。在Java语言中所有的容器组件和元素组件都是事...
    99+
    2023-05-31
    java 事件监听机制 ava
  • Node.js 事件循环中的回调函数和事件监听器
    ...
    99+
    2024-04-02
  • 关于js的事件循环机制剖析
    前言 众所周知, JavaScript是单线程这一核心,可是浏览器又能很好的处理异步请求,那么到底是为什么呢?其中的原理与事件循环机制大有关系。 在探索事件循环之前,我们得先了解浏览...
    99+
    2024-04-02
  • JS中传播事件、取消事件默认行为、阻止事件传播的示例分析
    这篇文章主要介绍JS中传播事件、取消事件默认行为、阻止事件传播的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!1.事件处理程序的返回值    &...
    99+
    2024-04-02
  • React实现监听粘贴事件并获取粘贴板中的截图
    目录监听粘贴事件并获取粘贴板中的截图TSX中给组件添加监听粘贴事件从粘贴板获取截图文件React监听事件事件监听绑定的事件函数相关扩展监听粘贴事件并获取粘贴板中的截图 TSX中给组件...
    99+
    2022-11-13
    React监听粘贴事件 React粘贴板截图 React监听事件
  • vue中的事件触发(emit)及监听(on)问题
    目录vue事件触发(emit)及监听(on)每个 vue 实例都实现了事件接口案例vue emit事件无法触发问题vue事件触发(emit)及监听(on) 每个 vue 实例都实现了...
    99+
    2024-04-02
  • Flex事件机制中Flex事件分发和监听的示例分析
    这篇文章给大家分享的是有关Flex事件机制中Flex事件分发和监听的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。什么是Flex事件机制Flex事件可以看作是一种触发机制,当满足了一定的条件后,会触发这个...
    99+
    2023-06-17
  • 关于Vue中的计算属性和监听属性详解
    目录一、computed计算属性(1)计算属性的缓存(2)计算属性的setter二、watch监听属性一、computed计算属性 Vue.js模板内的表达式非常便利,但是设计它们的...
    99+
    2023-05-20
    Vue 计算属性 Vue 监听属性
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作