如何移除一个元素所绑定的事件

2019-05-17 19:03:12 +08:00
 McContax

最近学校要求刷网课,用的超星学习通,就是那个鼠标一旦移出播放器就自动暂停播放的平台,我用着用着把那个事件监听器移除了(通过 chrome 的审查元素里面的 event listener 直接 remove ) 但是当我想做成一句代码方便再 console 输入的时候(document.getelementsxxxxxx.removeEventListener),点开 properties 没办法找到 onmouseout 绑定的事件 本来是打算直接用 removeEventListener 移除事件然后打包分发代码给同学,毕竟不是所有人都用 chrome,像 edge 的那个就连一键移除这个选项都没有

5877 次点击
所在节点    JavaScript
12 条回复
dondom
2019-05-17 19:25:27 +08:00
function removeEventListener(node) {
var parent = node.parentElement
var copy = node.cloneNode()
copy.innerHTML = node.innerHTML
parent.replaceChild(copy, node)
}

随便写了一个 性能没要求的话应该能用
Juszoe
2019-05-17 22:46:31 +08:00
正巧我几个月前也写了个超星的脚本,也考虑过这个问题,发现没有一个很好的解决方案,最后是监听播放器停止事件,然后进行播放。
代码你可以看一下 https://juszoe.github.io/erya/
Juszoe
2019-05-17 22:52:32 +08:00
另外由于那个事件是匿名函数,removeEventListener 是删不掉它的,希望有大佬能告知如何删除匿名函数
1010543618
2019-05-17 23:15:14 +08:00
1010543618
2019-05-17 23:15:30 +08:00
貌似没有更好的方法了
duan602728596
2019-05-17 23:17:18 +08:00
你可以写个定时器,轮询 video.paused 状态,当 video 暂停时,通过 video.play()播放
1010543618
2019-05-17 23:18:56 +08:00
fsdgfd
2019-05-18 02:32:59 +08:00
试试 pointer-events:none
bankroft
2019-05-18 09:07:57 +08:00
McContax
2019-05-19 01:01:33 +08:00
@Juszoe 是一个不错的思路,其实监听暂停这个比较现实,我尝试去用 remove event listener,由于是匿名函数每次执行都要事先展开 html 的播放器页面,让浏览器计算得出 mouseout 的监听事件,然后才能移除


@1010543618 chrome 那个试了一下,很艰难的成功了,不过还有一个难点,在运行 get eventlistener 之前必须手动展开一次 html 相关的播放器的代码,不然的话 get eventlistener 就没办法 get 到 mouseout,关于这一点 dalao 有没有什么好的解决方法吗
![avatar]( )
McContax
2019-05-19 01:20:45 +08:00
@1010543618 刚刚又挖了一下,我发现我的 event listener 是勾了 ancestors all,也就是说实际上 mouseout 并不是绑定在我认为的那个元素那里,我把 ancestors all 关掉,找出了他绑定元素的位置了,这样子直接用 remove 就 OK 了,谢谢
Juszoe
2019-05-19 08:19:57 +08:00
@McContax #10 需要展开是因为嵌套在 iframe 里,展开一下 html 后 console 作用域自动帮你切换到那个 iframe 里,console 左上角能看见,用 window.iframe[''].document 就好了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/565175

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX