javascript - 不能移除监听的问题
天蓬老师
天蓬老师 2017-04-10 16:39:10
[JavaScript讨论组]

点击test2后再点击test1还是会弹出“1”
为什么点击test2不能移除test1的监听呢?

<p class="test1">
    test1
</p>
<p class="test2">
    test2
</p>
<script>
    document.querySelector(".test1").addEventListener('click',function(){
        alert(1)
    },false); 
    document.querySelector(".test2").addEventListener('click',function(){
        document.querySelector(".test1").removeEventListener('click',function(){
        
        },false);
    },false); 
</script>
天蓬老师
天蓬老师

欢迎选择我的课程,让我们一起见证您的进步~~

全部回复(3)
PHP中文网
target.removeEventListener(type, listener[, useCapture])

第二个参数要指定需要被移除的函数, 你重新声明了一个function 怎么移除呢?

<p class="test1">
    test1
</p>
<p class="test2">
    test2
</p>
<script>
    var func = function(){
        alert(1)
    };
    document.querySelector(".test1").addEventListener('click',func,false); 
    document.querySelector(".test2").addEventListener('click',function(){
        document.querySelector(".test1").removeEventListener('click',func,false);
    },false); 
</script>
PHPz

注意 removeEventListener 的第二个参数, 这个参数就是要被移除的 function ,你这里传入的是一个新的 function ,而并不是原来 add 进去的 function() { alert(1) }, 也就是说,你必须把 function() { alert(1) } 设置到外部来获得函数句柄( abc = function() { alert(1) } ),这样才能在 removeEventListener 中移除它 ( removeEventListener('click', abc) )

PHPz

remove 的时候要 remove 同一个才可以。

function(){
  alert(1)
}

function(){
}

function(){
}

是完全不同的3个函数,就算字面上看起来一样,也是不同的函数

function test1Handler(){
  alert(1);
}
document.querySelector(".test1").addEventListener('click', test1Handler, false); 
document.querySelector(".test2").addEventListener('click', function(){
  document.querySelector(".test1").removeEventListener('click', test1Handler, false);
}, false);
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号