2010-09-13 101 views
1

我有一個很大的問題。加載後防止冒泡?

我有一個名爲「#box」的div點擊鏈接在它之後加載外部內容:

$("#box a").click(

function(e) 
{ 
e.preventDefault(); 
var hash = this.parentNode.hash; 
    $("#boxLoaded").load('boxFiles/'+ hash.substring(1) +'.html'); 
    $("#box").fadeOut(100); 
    $("#boxLoaded").fadeIn(200);  
}); 

易到目前爲止:)

當有人在「#boxLoaded」點擊任何地方它消失,再次裝載盒,所以它看起來像在開頭:

$("#boxLoaded").click(
    function() 
    { 
     $("#boxLoaded").fadeOut(200); 
     $("#box").show(); 
}); 

問題是我有一個菜單命名加載文件「對話框菜單」(#boxLoaded內),當有人CLI cks他們 - 上面的代碼正在執行(淡出#BoxLoaded並顯示#Box)。

我想阻止它的發生,而是:

$("#box-menu").click(
    function(e) 
    { 
     e.preventDefault() 
}); 

怎麼辦?它工作正常,當我沒有加載()這些文件...

回答

3

你只需要切換到.live()這裏通過event.stopPropagation()停止:起泡或者

$("#box-menu").live("click", function(e) { 
    e.stopPropagation(); 
}); 

,你可以重新綁定然後加載,改變這個:

$("#boxLoaded").load('boxFiles/'+ hash.substring(1) +'.html'); 

要這樣:

$("#boxLoaded").load('boxFiles/'+ hash.substring(1) +'.html', function() { 
    $("#box-menu").click(function(e) { e.stopPropagation(); }); 
}); 
+0

奧赫。我終於可以用jQuery做這個菜單了(你的選擇器工作的很好,我可以改變邊界/背景等),但是停止傳播stil不起作用。怎麼了?

- 仍然淡出boxLoaded div;/ – fomicz 2010-09-13 13:21:07

+0

@fomicz - 您是使用'.live()'還是重新綁定?根據順序,您可能希望重新綁定以確保安全,否則綁定順序可能很重要(它們按綁定順序執行),因此您可能需要切換到'.delegate()'並將其綁定。 – 2010-09-13 13:28:31

+0

第一種方法不起作用,但第二種方法不起作用。輝煌!你一直在這裏,難道你不是某種機器人尼克嗎? ;) – fomicz 2010-09-13 13:53:32

0

通過調用e.preventDefault()您只能阻止鏈接恢復其默認事件。鏈接被點擊後,包含div #boxLoaded仍然有其onclick()命令。而不是使用e.preventDefault()嘗試return false。我認爲在這種情況下應該和preventDefault()一樣,也可以放棄下面的命令。

- 我不能,但尚未響應尼克人民帖子發表評論,「這就是冷靜,並沒有意識到有一個e.stopPropagation()功能」