2012-02-14 85 views
-1

photoContainer下面有孩子。这工作正常,但如果我点击其任何子代码执行,隐藏blackLayer并删除photoContainer。我怎样才能防止这种情况发生,并在我点击任何地方时执行,但在photoContainer孩子身上?jquerys'e.stopPropagation()无法获得所需功能

谢谢。

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

快速搜索会导致您完全重复http://stackoverflow.com/questions/1122375/jquery-event-stoppropagation-seems-not-to-work。 – elclanrs 2012-02-14 00:21:57

+0

很好,但返回false;在这种特殊情况下不起作用。我不明白为什么-1。 – user1027620 2012-02-14 00:27:36

回答

1

我相信问题是,你停止事件的传播父元素,你要停在#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这将阻止点击事件的传播。

这里是一个演示:http://jsfiddle.net/J9dBS/2/(请注意,如果你的“孩子”元素上单击显示任何警报)

我想指出,.live()被deprecidated在jQuery 1.7。如果您在使用jQuery 1.7或更高版本,然后它的建议使用.on()这样的:

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

或者,如果你正在使用jQuery 1.4.2的jQuery 1.6.4那么它建议你使用.delegate()

$(<root-element>).delegate(<selector>, <event>, <event-handler>); 
+0

感谢您解释问题并提供实际的工作答案,而不是留下愚蠢的无关评论。 (你在第二个函数中缺少一个''click',function(event)' - )。 – user1027620 2012-02-14 00:34:54

+0

@ user1027620感谢您的更正。不客气。 – Jasper 2012-02-14 00:36:18