javascript - window.addEventListener 如何防止同一元素多次绑定同一事件 触发多次??
怪我咯
怪我咯 2017-04-11 12:01:20
[JavaScript讨论组]

问题:
一下代码中: p 多次绑定 click 事件 ,绑定一次 , 点一下 触发一次 , 绑定2次 , 点一下,触发两次 。 有没有办法减少 p.addEventListener 绑定的 click 事件的次数?? 我尝试过的:

    // 无论事件是否存在 , 先移除 
    p.removeEventListener
    
    // 无时间是否存在 , 添加
    p.addEventListener

这样做 , 没有效果(绑定2次, 仍然触发两次 , 三次触发三次) .... 有没有办法做到:

p.onclick = function(){ ... } 

类似与这样的效果(就是不产生事件队列) , 而是不断的重写事件(类似于 js的函数重载)
描述的不是太清楚 , 请耐心看完,谢谢

html :

绑定

这是一个测试按钮

var p = document.getElementsByClassName('p')[0]; var bindBtn = document.getElementsByClassName('loginEvent')[0]; // 通过此按钮 可以 让 对元素 p 绑定多次click事件 bindBtn.addEventListener('click' , loginEvent ,false); // 注册 p 事件 function loginEvent(){ p.addEventListener('click' , sayHello ,false); } // p 事件触发内容 function sayHello(){ console.log('hello'); }
怪我咯
怪我咯

走同样的路,发现不同的人生

全部回复(3)
ringa_lee

removeEventListener 应该是没有问题的,很有可能是 removeEventListener 写法不对,能把你这部分在问题里详细补充一下吗,你的问题里只是说明了一下 APi,没有看到传入的参数。

PHP中文网

绑定事件前先移除一次呢?如

bindBtn.removeEventListener('click' , loginEvent ,false);

另外就是自己实现一个绑定解绑的工具函数,通过工具函数来绑定解绑事件。

这样你就可以控制绑定次数了

黄舟

你还不如换个思路,初始化先绑定一个函数就别动了,随后改动这个函数。

var loginEvent = function() {};

bindBtn.addEventListener('click' , loginEvent);

后面随时修改这个loginEvent

loginEvent = function() { alert('1'); };
loginEvent = function() { alert('2'); };
loginEvent = function() { alert('3'); };
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

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