javascript - 一个元素上有两个监听器 : let only one fire

标签 javascript jquery events event-handling

在多个事件处理程序对单个元素和操作进行操作的情况下,我如何才能强制仅触发一个事件? JSFiddle .

$("#buttons").on("click", "button", function(){
    // only do this if the event below isn't fired
});
$("#buttons").on("click", "button.red", function(){
    // if this one happens, don't do the above one
});

最佳答案

对于更通用的解决方案,event.stopImmediatePropagation() 将阻止事件触发更多处理程序。对于绑定(bind)到同一元素的处理程序,它们绑定(bind)的顺序似乎很重要。您还可以将您有条件地不想触发的元素绑定(bind)到 DOM 中更高的元素并使用 e.stopPropagation():

$(document).ready(function(){
    $("#buttons").on("click", ".red", function(e){
        e.stopImmediatePropagation();
        $(this).css("color","red");
    });
    $("#buttons").on("click", "button", function(){        
        $(this).css("background","blue");
    });
});

http://jsfiddle.net/Ef5p7/

下面是如何使用 stopPropagation() 代替:

<div id="buttonsOuter">
    <div id="buttons">
        <button>turn blue</button>
        <button class="red">only turn text red</button>
        <button>turn blue</button>
        <button>turn blue</button>
        <button>turn blue</button>
    </div>
</div>

...

$(document).ready(function () {
    $("#buttons").on("click", ".red", function (e) {
        e.stopPropagation();
        $(this).css("color", "red");
    });
    $("#buttonsOuter").on("click", "button", function () {
        $(this).css("background", "blue");
    });
});

http://jsfiddle.net/CwUz3/

关于javascript - 一个元素上有两个监听器 : let only one fire,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18367125/

相关文章:

javascript - 如何访问 Angular 模板中的 map 对象

javascript - 如何使用 jQuery 在悬停时显示绝对定位的同级 div?

jquery - 后伸和背景大小 : cover

java - java中的序列化,在事件中重新膨胀对象?

java - Java 中的事件引发处理

javascript - 在 knex js 中查询用户和密码验证

javascript - 使用javascript移动div

javascript - Highcharts - 如何从面积图中删除开始和结束填充

javascript - 我应该将什么脚本添加到下面的代码中,以便在滚动时添加事件类?

java - 如何监听组小部件(Java SWT)的文本修改事件?