有没有一种方法可以停止特定命名空间的事件传播?

5
假设我们创建一个如下所示的事件监听器:
$(element).on("click.namespace",function(e){alert('hi')});

现在我有一个事件在一个内部的div里面,我想停止第一个事件,同时保留其他点击事件:

$(element).find('div').on("click",function(e){
    e.stopPropagation(); //I want it to stop only the previous function
});

有没有一种方法只停止这个特定命名空间的传播?允许所有其他函数正常运行?

必须与命名空间相关,因为我想要停止的事件在外部库中。


所以你想防止在同一元素上执行命名空间事件处理程序?如果是的话,看起来你正在寻找http://api.jquery.com/event.stopImmediatePropagation/。请注意,调用此函数的处理程序必须首先绑定。 - Felix Kling
不完全是这样,这只是为了简单起见。我想要停止的事件处理程序绑定在HTML上,但当有人点击我的下拉菜单时,我希望它保持打开状态。因此,我需要阻止该点击事件的传播,但仅限于下拉菜单的命名空间,以便其他点击事件可以继续进行。 - Megarushing
2
好的,让我们看看我是否正确理解了:有一些第三方代码将事件处理程序与命名空间绑定在一起,例如在“click”上,您想要阻止所有“click.namespace”处理程序的执行? - Felix Kling
我编辑了问题,试图更好地解释它,感谢您的帮助。 - Megarushing
我无法想象在不修改jQuery本身的情况下完成这个任务。没有办法从事件执行中排除命名空间。 - Felix Kling
2个回答

0

是的,你可以使用非运算符

$(element+":not(tags to be avoided)").on("click.namespace",function(){
 alert('hi')
});

0

将其作为类添加,然后进行检查。

$(element).on("click", function(evt){
   if ($(this).hasClass('namespace')) {
       evt.stopPropagation();
   }
   alert('hi');
});

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接