Javascript jquerys';e、 stopPropagation()无法获取所需的功能

Javascript jquerys';e、 stopPropagation()无法获取所需的功能,javascript,jquery,html,Javascript,Jquery,Html,下面的光容器有子对象。这可以正常工作,但如果我单击它的任何子项,代码就会执行,隐藏blackLayer并删除photoContainer。当我点击photoContainerchildren以外的任意位置时,如何防止这种情况发生并执行 谢谢 $('div#photoContainer').live('click', function (e) { e.stopPropagation(); var blackLayer = $('div#blackLayer'); if (b

下面的光容器有子对象。这可以正常工作,但如果我单击它的任何子项,代码就会执行,隐藏blackLayer并删除
photoContainer
。当我点击
photoContainer
children以外的任意位置时,如何防止这种情况发生并执行

谢谢

$('div#photoContainer').live('click', function (e) {
    e.stopPropagation();
    var blackLayer = $('div#blackLayer');
    if (blackLayer.length) {
        blackLayer.fadeOut();
    }
    $(this).remove();
});

我认为问题在于您正在停止父元素上的事件传播,您希望停止事件在
#photoContainer
元素的子元素上的传播,以便它不会传播到
#phoeoContainer
元素:

$('#photoContainer').live('click', function (e) {
    var blackLayer = $('div#blackLayer');
    if (blackLayer.length) {
        blackLayer.fadeOut();
    }
    $(this).remove();
});
$('#photoContainer > div').live('click', function (event) {
    event.stopPropagation();
});
当点击事件在
#photoContainer
元素的子
div
上触发时,这将停止点击事件的传播

下面是一个演示:(注意,如果单击“child”元素,则不会显示任何警报)

我想指出的是,从jQuery 1.7开始,
.live()
已被弃用。如果您使用的是jQuery 1.7或更高版本,建议您使用
.on()
如下:

$(<root-element>).on(<event>, <selector>, <event-handler>)

快速搜索将引导您找到这个精确的副本。很好,但返回false;在这种特殊情况下不起作用。我不明白为什么-1.谢谢你解释这个问题,提供了一个实际可行的答案,而不是留下一个愚蠢的无关评论。(您缺少第二个函数上的
“单击”函数(事件)
)。
$(<root-element>).delegate(<selector>, <event>, <event-handler>);