如何切换类,以便单击主体将关闭下拉菜单并更改剩余项(jquery)的背景?

如何切换类,以便单击主体将关闭下拉菜单并更改剩余项(jquery)的背景?,jquery,menu,toggleclass,Jquery,Menu,Toggleclass,有一个由展开/折叠按钮(#客户端选择)和下拉菜单(.client select dd)组成的下拉菜单。菜单本身工作得很好,只是我希望如果用户单击菜单之外的任何位置,而不是特别地再次单击按钮,它也可以折叠 最初,菜单是折叠的,因此第一次单击会更改菜单按钮(#客户端选择)上的背景,并使下拉选项可见(.client select dd)。第一次单击还会将类添加到主体(.client deactivate)。再次单击(#客户端选择)可折叠菜单并恢复按钮图像背景 在我看来,在菜单打开时单击主体(并具有类“

有一个由展开/折叠按钮(#客户端选择)和下拉菜单(.client select dd)组成的下拉菜单。菜单本身工作得很好,只是我希望如果用户单击菜单之外的任何位置,而不是特别地再次单击按钮,它也可以折叠

最初,菜单是折叠的,因此第一次单击会更改菜单按钮(#客户端选择)上的背景,并使下拉选项可见(.client select dd)。第一次单击还会将类添加到主体(.client deactivate)。再次单击(#客户端选择)可折叠菜单并恢复按钮图像背景

在我看来,在菜单打开时单击主体(并具有类“.client deactivate”)应该折叠菜单并删除.client deactivate,但单击主体完全没有任何作用。谢谢你们所有人能提供的帮助

$("#client-select").click (function() {
  $("body").toggleClass("client-deactivate");
  $(".client-select-close").toggleClass("client-select-open");
  $(".client-select-dd").toggle();
});

$(".client-deactivate").click (function() {
  $(".client-select-open").toggleClass("client-select-close");
  $(".client-select-dd").toggle();
});

这可能是因为当浏览器第一次读取click处理程序时,body标记上没有“.client deactivate”类。此外,当您单击主体时,您不希望切换任何内容,因为如果菜单被折叠,并且您单击主体,它将展开菜单。我假设您只希望body click处理程序在菜单已经打开时关闭它

尝试将第二次单击处理程序更改为:

$("body").click(function() {
  if($("body").hasClass("client-deactivate") {
    $(".client-select-open").toggleClass("client-select-close");
    $(".client-select-dd").toggle();
    $("body").removeClass("client-deactivate");
  }
});

你也可以考虑用RovivCasle替换这些切换函数,只需确保点击鼠标不会扩展菜单…就像如果另一个函数折叠菜单,但没有将“客户端停用”类删除到主体中,那么单击主体仍然会有类名并运行上述代码,将菜单切换到打开位置。

解决了这个问题:

$(“#客户端选择”).live('单击',函数()){ $(“#客户端选择”).addClass(“客户端选择打开”); $(“#客户端选择”).removeClass(“客户端选择关闭”); $(“.client select dd”).css(“显示”、“块”); $(“body”).addClass(“客户端停用”); });


谢谢,但还是不行。还有其他建议吗?我附加了HTML以备参考:
    • 我对“.live”了解甚少。其他人可能会提供更好的解释来解释为什么这样做。啊,是的,这证实了问题在于主体还没有“客户机停用”类,因此事件处理程序没有绑定到事件。我不知道。live()--这很方便!显然,它将一个处理程序附加到一个元素的事件上,该元素将获得选择器。。。换句话说,它将事件附加到类名为“client deactivate”的元素,即使该元素和/或类名尚不存在。
      $(".client-deactivate").live('click', function() {
        $("#client-select").removeClass("client-select-open");
        $("#client-select").addClass("client-select-close");
        $(".client-select-dd").css("display", "none");
        $("body").removeClass("client-deactivate");
      });