Javascript 为什么单击列表后不包括AddClass?

Javascript 为什么单击列表后不包括AddClass?,javascript,jquery,Javascript,Jquery,我似乎不明白这一点,我有下面的代码有点混乱,从我一直在使用的javascript开始,我使用切换菜单使其工作,并且它在第一个li下拉列表中完美工作,但对于其他三个,它没有,我想知道如何修复它 有4个下拉列表可用于。单击,只有第一个下拉列表激活AddClass 我没有包含任何HTML,因为正如我所说的,它显然在第一个按钮中添加了li底部修复,但对于其他三个按钮,它没有 $('.menu-sub').css("display") == "block" 将始终比较文档中第一个.menu子元素的显示C

我似乎不明白这一点,我有下面的代码有点混乱,从我一直在使用的javascript开始,我使用切换菜单使其工作,并且它在第一个li下拉列表中完美工作,但对于其他三个,它没有,我想知道如何修复它

有4个下拉列表可用于。单击,只有第一个下拉列表激活AddClass

我没有包含任何HTML,因为正如我所说的,它显然在第一个按钮中添加了li底部修复,但对于其他三个按钮,它没有

$('.menu-sub').css("display") == "block"
将始终比较文档中第一个.menu子元素的显示CSS样式。从:

获取匹配元素集中第一个元素的计算样式属性值[…]

如果要引用称为“打开切换”的元素,请使用以下命令:

从:

如果已提供,则在动画完成后将触发回调。这对于按顺序将不同动画串在一起非常有用。回调不会发送任何参数,但会设置为正在设置动画的DOM元素

不要重复选择器而不是处理程序,只需保留对已单击元素的引用:

$(".mobile-menu > .menu-container > ul > li:nth-of-type(3)").click(function(e) {
    var $clickedElement = $(this);
    $clickedElement.find(".menu-sub").toggle(function() {
        $clickedElement.toggleClass(
          "li-bottom-fix", 
          $(this).css("display") === "block"
        );
    });
});

如果可以的话,应该将所有这些元素赋予同一个类,这样就不必重复逻辑。至少命名事件处理程序并重用它,因为它是通用的。

$'.menu sub'.cssdisplay==block将始终比较文档中第一个.menu子元素的显示CSS样式。从:获取匹配元素集中第一个元素的computed style属性的值[…]主题外,因为此代码为什么不起作用?@FelixKling,这很有意义。。谢谢你帮我澄清。我想,考虑到它选择的是具有n个类型的特定li,它只会关注子元素。@bhspencer:为什么这段代码不起作用?不是自动离题。@FelixKling为true,但当必须包含所需的行为、特定问题或错误以及在问题本身中重现该问题所需的最短代码时,它们是离题的。没有明确问题陈述的问题对其他读者没有用处,这一点在这里很明显。
$(this).css("display") == "block"
$(".mobile-menu > .menu-container > ul > li:nth-of-type(3)").click(function(e) {
    var $clickedElement = $(this);
    $clickedElement.find(".menu-sub").toggle(function() {
        $clickedElement.toggleClass(
          "li-bottom-fix", 
          $(this).css("display") === "block"
        );
    });
});