3

我认为其他开发人员以前也遇到过这种情况。我们有一个庞大的代码库,其中包含许多遵循这种模式的组件:

$('#elm').on('click',function($e){
    $e.stopPropagation();
    //... do stuff (i.e. Open something);
});

$('html').on('click',function($e){
    //... do oposite of stuff (i.e. Close something);
}

我们的问题是,stopPropagation整个站点的所有 's 都在停止关闭其他组件。我们真正想要的是一种机制,只阻止这个组件的点击处理程序,而不是其他的。

我正在寻找一种现在最容易实施的解决方案来修复我们的错误,并让我们的多开发团队在未来跟进。

4

1 回答 1

1

.live()方法在事件传播到文档顶部后处理事件,无法使用实时事件停止传播,这允许您进行破解并利用这一点,因为该.live()方法将处理程序绑定到$(document),并识别触发了哪个元素使用该event.target属性在层次结构顶部的事件。

阻止传播冒泡 DOM 层次结构,但由于stopPropagation处理程序处于文档级别,因此没有上层可以传播。

另一方面请注意,由 处理的事件.delegate()将冒泡到它们所绑定的元素;绑定在 DOM 树中它下面的任何元素上的事件处理程序将在调用委托的事件处理程序时已经执行。因此,这些处理程序可能会阻止委托处理程序通过调用触发event.stopPropagation()

看这个例子:http: //jsfiddle.net/knr3v/2/

因此,您可以使用liveanddelegate方法而不是单击、绑定、on 方法来完全按照您的说明进行操作。

于 2013-05-29T08:01:50.137 回答