2010-09-13 63 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()功能”