如何移除一个元素所绑定的事件 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐关注
Meteor
JSLint - a Javascript code quality tool
jsFiddle
D3.js
WebStorm
推荐书目
Javascript 权威指南第 5 版
Closure: The Definitive Guide
McContax
V2EX    Javascript

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

  •  
  •   McContax 2019-05-17 19:03:12 +08:00 6439 次点击
    这是一个创建于 2389 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    12 条回复    2019-05-19 08:19:57 +08:00
    dondom
        1
    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
        2
    Juszoe  
       2019-05-17 22:46:31 +08:00
    正巧我几个月前也写了个超星的脚本,也考虑过这个问题,发现没有一个很好的解决方案,最后是监听播放器停止事件,然后进行播放。
    代码你可以看一下 https://juszoe.github.io/erya/
    Juszoe
        3
    Juszoe  
       2019-05-17 22:52:32 +08:00
    另外由于那个事件是匿名函数,removeEventListener 是删不掉它的,希望有大佬能告知如何删除匿名函数
    1010543618
        5
    101043618  
       2019-05-17 23:15:30 +08:00
    貌似没有更好的方法了
    duan602728596
        6
    duan602728596  
       2019-05-17 23:17:18 +08:00 via iPhone
    你可以写个定时器,轮询 video.paused 状态,当 video 暂停时,通过 video.play()播放
    1010543618
        7
    1010543618  
       2019-05-17 23:18:56 +08:00   1
    fsdgfd
        8
    fsdgfd  
       2019-05-18 02:32:59 +08:00 via Android
    试试 pointer-events:none
    bankroft
        9
    bankroft  
       2019-05-18 09:07:57 +08:00 via Android
    McContax
        10
    McContax  
    OP
       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
        11
    McContax  
    OP
       2019-05-19 01:20:45 +08:00
    @1010543618 刚刚又挖了一下,我发现我的 event listener 是勾了 ancestors all,也就是说实际上 mouseout 并不是绑定在我认为的那个元素那里,我把 ancestors all 关掉,找出了他绑定元素的位置了,这样子直接用 remove 就 OK 了,谢谢
    Juszoe
        12
    Juszoe  
       2019-05-19 08:19:57 +08:00
    @McContax #10 需要展开是因为嵌套在 iframe 里,展开一下 html 后 console 作用域自动帮你切换到那个 iframe 里,console 左上角能看见,用 window.iframe[''].document 就好了
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     4740 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 28ms UTC 01:12 PVG 09:12 LAX 17:12 JFK 20:12
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86