2012-09-02 22 views
0

我有一个div显示/隐藏点击,这个div将通过ajax加载从me.html加载内容。我添加了一个添加到这个标签的类类,然后当我再次点击添加了类的标签时,它应该隐藏div。但这不起作用。显示隐藏只能在阿贾克斯第一次打电话

$(function() { 
    $("#nav a").click(function() { 
     $(this).toggleClass('added'); 
     if($(".o1").length <= 0) { 
      $("body").append('<div class="o1"></div>'); 
      $(".o1").load("me.html").css("display","block"); 
     } 
     $(".added").click(function() { 
      $(".o1").css("display","none"); 
     }) 
    }); 
}); 

任何想法?

+0

你得到什么错误? –

+0

没有错误,看起来像逻辑不正确 – Mike

+0

你的点击选择是错的 –

回答

1

试试这个。这将设置对象,如果它不存在。然后,一旦这样做,它将切换它,如果将来点击。

$(function() { 
    $("#nav a").click(function() { 
     $(this).toggleClass('added'); 
     if($(".o1").length <= 0) 
     { 
      $("body").append('<div class="o1"></div>'); 
      $(".o1").load("me.html"); 
     } else if($(this).hasClass("added")) 
      $(".o1").hide(); 
     } else { 
      $(".o1").show(); 
     } 
    }); 
}); 

添加click处理程序与您的代码的所有.added链接会产生一个问题,因为在你的代码中有。

这显示了正在发生的事情的时间表。希望你能跟随。括号内的数字是事件。相同的数字表示它们同时发生。

(1)#nav a被点击然后#nav a得到一个类的added然后.o1加入然后added类中的任何链路获取一个点击事件

(2)#nav a被点击然后#nav a删除类added然后.o1已存在th恩added类中的任何链接获取click事件(但不是这个环节,但它仍然有以前的单击事件,因为它不是独栋)

(2).added也被认为是在点击的同时,以上,因为它是在(1)

(3)#nav a被点击然后#nav a附动作得到一个类的added然后.o1已经存在然后added类中的任何链路获取一个点击事件

(3).added也被认为是点击在上述,因为它是在(1)

(4)#nav a被点击然后#nav a附相同的时间动作得到一个类的added然后.o1已经存在然后added类中的任何链接得到的点击事件

(4).added也被认为是在点击的同时, (1) (4).added也被视为与上述操作同时被点击,因为它被附加在(3)

等...

要把握的关键是你没有脱离click事件,而是你附加越来越多。

+0

但是我的代码出了什么问题 – Mike

+0

@Mike你的代码没有任何东西可以在隐藏状态后切换状态,我更新了我的代码以处理你的'added 'class。 – Scott

+0

@Mike更新了事件的时间表,或许可以解释发生了什么问题。 – Scott

0

试试这个...

<div class="o1"></div> 

$(".o1").hide(); 

$(function() { 

    $("#nav a").click(function() { 

      $(this).toggleClass('added'); 


      if($(this).hasClass('added') == false){ 

        $(".o1").load("me.html", function(){$(".o1").show()}); 

       } 

      if($(this).hasClass('added') == true){ 

        $(".o1").hide(); 

       }) 
     }); 
});