2012-02-14 87 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