javascript - JS中DOM元素监听了多个事件,如何只触发一个事件
ringa_lee
ringa_lee 2017-04-11 11:24:47
[JavaScript讨论组]

项目中有个需求,某个DOM元素绑定了多个事件,在某些情况下,只触发其中一个特定事件

可能之前没讲清除需求,下面代码中的例子,事件a是某框架实现的,无法改内部源码。因特殊需求,对于某个DOM元素需要再次绑定一个事件,但是该事件只有在满足条件的情况下才执行。。jquery的trigger方法可以满足,通过传参数来判断。原生的怎么写呢,

之前大部分答案都是说在同一个事件里做判断,因无法改变框架源码所以方法行不通。。

    <button id="button">button</button>
    <script type="text/javascript">
        var button = document.querySelector('button');

        var a = function(e){
            console.log('a');
        };

        var b = function(e){
            console.log('b');
        };

        button.addEventListener('click', a);
        button.addEventListener('click', b);
        
        button.click();
    </script>

代码如上,如何让button只触发a事件,而不触发b事件

ringa_lee
ringa_lee

ringa_lee

全部回复(9)
天蓬老师

这个应该是有条件的吧?满足条件A,则触发a事件,否则触发b事件

伊谢尔伦

jqurey中有自定义事件~~~~你可以试试触发自定义事件来实现

PHPz

你既然说了,在某些情况下。

那你就要在事件里去判断,当前是不是这样的情况。


总要判断的。

迷茫

是不是可以换个思路,允许事件触发;但是在处理函数的头部做判断,条件不符合则退出不往下执行?

var a = function(e){
    if(!valid){
        return;
    }
    console.log('a');
};
高洛峰

e.cancelBubble=true;// ie下阻止冒泡
e.stopPropagation();// 其它浏览器下阻止冒泡

巴扎黑

jquery使用命名空间

$('button') .on('click.myNamespace', function() { console.log('a'); }); 
$('button') .on('click.myNamespace2', function() { console.log('b'); }); 
$('button').trigger('.myNamespace2');
怪我咯

既然你自己都清楚是某些情况下,那为什么不都卸载同一个click事件里面,在事件里面进行判断呢?
总归是要判断的,写到一起还更方便点。

PHP中文网

用的是框架,在事件里条件判断不行

PHP中文网

我觉得可以试一下阻止默认行为的方法,然后根据你的入参不同(或者条件不同)去触发不同的方法。

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

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