javascript - jQuery,只触发事件,如果没有触发其他事件

标签 javascript jquery

有没有办法查明 jquery 事件是否已被另一个事件监听器捕获?

以下示例:我有以下事件绑定(bind):

$("body").on("click", ".linkarea", function (e) {
    document.location.href = $(this).find("a")a.attr("href");
});
$("body").on("click", ".delete", function (e) {
    console.log("DELETE");
});

这就是我的 HTML 的样子:

<div class="linkarea">
    <h1><a href="/test.html">LINKED</a></h1>
    <p>Blabla</p>   
    <a class="btn delete">DELETE</a>
</div>

我想要实现的是,如果用户单击 div 的任何部分(除了 .delete 按钮),他应该被重定向到/test.html。如果他单击 .delete 按钮,则只应执行(!)其他事件代码。

我知道,我可以将“e.stopPropagation()”添加到删除事件中,但也许我在另一个地方使用 .delete 类,并且可能有必要它会冒泡。我正在寻找的是这样的:

$("body").on("click", ".linkarea", function (e) {
    if(!e.wasAlreadyExecuted)
        document.location.href = $(this).find("a")a.attr("href");
});

最佳答案

您可以将 event.target 过滤掉:

$("body").on("click", ".linkarea", function (e) {
    if($(e.target).closest('.delete').length) return;
    document.location.href = $(this).find("a")a.attr("href");
});

编辑:

I know, that I could add "e.stopPropagation()" to the delete-event, but maybe I use the .delete class on another place, and there it could be necessary, that it bubbles.

或者停止来自 .delete 的事件传播点击处理程序:

$("body").on("click", ".delete", function (e) {
    console.log("DELETE");
    e.stopPropagation();
});

<罢工>

关于javascript - jQuery,只触发事件,如果没有触发其他事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31424882/

相关文章:

javascript - 有什么方法可以在没有 JavaScript 的情况下拉伸(stretch) div 吗?

javascript - 帮助在 javascript 中访问 json 文件中的节点

jquery - 让 jSignature 与 Twitter Bootstrap 模式一起工作

javascript - 如何将 onmousedown 事件绘制为存储在数组某个索引处的值,而不是整个数组调用?

javascript - 有没有一个在 IE 中使用媒体播放器的好包装器

javascript - jquery - 像插件一样在选定的 div 中添加 html 内容

javascript - 将按钮添加到移动/拖动的背景 HTML/CSS/JS

javascript - 如何在谷歌表格中以正确的格式邮寄单元格范围?

javascript - 如何显示正确的出发时间?

JavaScript - === 与 == 运算符的性能