5

我有一个从左侧滑入的侧窗格,使用 get() 动态添加内容。我希望窗格外的所有点击都能通过触发一个函数来关闭它。根据我阅读的其他问题,我想出了以下代码。

$('html').click(function() {
    if (side_showing) {
        close_side();
    }
});

$(document).on("click", "#side", function(event) {  
    event.stopPropagation();
});

我似乎无法让它工作。我知道该on()功能正在被触发,但event.stopPropagation似乎没有。有小费吗?

4

1 回答 1

13

您不能stopPropagation()与委托事件处理一起使用(事件处理程序位于父级上)。

这是因为事件传播首先使委托的事件处理工作,所以当你的事件处理程序被调用时,事件已经传播了。

代码中发生的事情的顺序是:事件传播到文档对象,然后调用事件处理程序。因此,当您调用event.stopPropagation()它时,它不会做任何事情,因为事件已经传播。

如果您需要阻止父对象获取事件传播,那么您不能使用委托事件处理。您必须将事件处理程序直接分配给对象本身,以便在事件传播之前拦截事件。如果这些是动态创建的对象,那么您必须在它们创建后立即为其分配事件处理程序。

我知道的唯一其他解决方案是将事件处理程序放在您不希望看到这些事件的父对象上,并确保这些事件处理程序忽略源自您的#side对象的事件。

于 2012-08-11T00:12:36.223 回答