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(); 
 });  

问题是我在加载的文件中有一个名为“box-menu”的菜单(在#boxLoaded 内部),当有人点击它们时 - 上面的代码正在执行(淡出#BoxLoaded 并显示#Box)。

我想防止它发生,但是:

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

该怎么办?它工作正常,当我不加载()这些文件时......

4

2 回答 2

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(); });
});
于 2010-09-13T13:08:10.937 回答
0

通过调用e.preventDefault(),您只会阻止链接恢复其默认事件。单击链接后,包含的 div#boxLoaded仍然有它的onclick()命令。而不是使用e.preventDefault()try return false。我认为这应该与这种情况下的相同,preventDefault()并且也会中止随后的命令。

——我还不能评论人们的帖子,但回应尼克,“太酷了,没有意识到有一个e.stopPropagation()功能”

于 2010-09-13T13:18:28.570 回答