【问题标题】:On click, making a menu disappear on menu. The "show" works, but the "hide" doesn't单击时,使菜单在菜单上消失。 “显示”有效,但“隐藏”无效
【发布时间】:2016-11-16 05:43:47
【问题描述】:

我的菜单中有一个投资组合项目,然后它变成一个下拉菜单,悬停在桌面上并点击移动。移动设备的问题是第一次点击显示菜单,这一切都很好,但接下来的点击并没有改变任何东西。

我试过.toggle().toggleClass(),这两种方法似乎都不起作用。我目前正在测试 if/else 语句,如下面的 JavaScript 所示。 “如果窗口宽度小于 940 像素”......然后“如果当前 visibilityhidden,则在单击父级时将其更改为 visibility: visible”,反之亦然。

编辑:

我只在小于 940 像素的浏览器窗口中进行测试,以模拟“移动”体验。

编辑#2:

为了这个问题,我删除了if window width < 940px,因为这样回答可能更容易?

$(function() {
  
  if ($('.nav__portfolio ul').css('visibility', 'hidden') == true) {
    $('.nav__portfolio').on('click', function() {
      $('.nav__portfolio ul').css('visibility', 'visible');
    });

  } else {
    $('.nav__portfolio').on('click', function() {
      $('.nav__portfolio ul').css('visibility', 'hidden');
    });
  }
  
};
.nav__portfolio ul {
  visibility: hidden;
<li class="nav__portfolio"><p>PORTFOLIO</p>
  <ul>
    <li>Dropdown Item</li>
    <li>Dropdown Item</li>
    <li>Dropdown Item</li>
  </ul>
</li>

【问题讨论】:

  • 你的 html 标记是什么样子的?
  • 你真的应该在一个 click 事件处理程序中执行此操作
  • 对不起,我应该补充一下。新手,我现在要编辑问题。
  • 第一次检查窗口宽度时没有 else 选项,因此您的代码(如果有效)仅在窗口宽度
  • 我目前仅在小于 940 像素的浏览器窗口中测试此代码。我正在使用模拟移动体验的 Chrome 开发工具功能,我相信设备工具栏?抱歉应该说清楚。

标签: javascript jquery css drop-down-menu click


【解决方案1】:

我猜你的主要问题是你传递给 if 语句的条件:

  • $('.nav__portfolio ul').css('visibility', 'hidden') 不是布尔值,因此它不会返回 truefalse

您可以像这样比较该 css 属性的实际值:

$('button').on('click', function() {
  if ($('div').css('visibility') !== 'hidden') {
    $('div').css('visibility', 'hidden');
  } else {
    $('div').css('visibility', 'visible');
  }
})
div {
  height: 200px;
  margin: 20px 0;
  background: #000;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<button>Toggle the div</button>
<div></div>

您的实际代码中的这个逻辑类似于:

$('.nav__portfolio').on('click', function() {
  if ($('.nav__portfolio ul').css('visibility') == 'hidden') {
    $('.nav__portfolio ul').css('visibility', 'visible');
  } else {
    $('.nav__portfolio ul').css('visibility', 'hidden');
  }
})

【讨论】:

  • 谢谢!我尝试使用这种方法,但不幸的是,它不起作用。我理解其中的逻辑,但我认为某些东西并没有加起来 :( .
  • 很高兴帮助您了解您的实际代码@wyang 的逻辑,但如果它不起作用,您需要在 codepen 或 jsfiddle 上复制您的问题并让我们查看整个代码
【解决方案2】:

您是否尝试过 hasClass/addClass/removeClass?

可能只需要一键监听

if ($(window).width() <= 940) {

    $('.nav__portfolio').on('click', function() {
        if ($('.nav__portfolio ul').hasClass('visibleClass') {
            $('.nav__portfolio ul').removeClass('visibleClass');
        } else {
            $('.nav__portfolio ul').addClass('visibleClass');
        }
    });
}

.nav__portfolio ul {
    visibility: hidden;
}

.nav__portfolio ul.visibleClass {
    visibility: visible;
}

【讨论】:

  • 确实,这是我尝试的第一种方法。我通常使用这种方法,但不知何故,它今天不适用于我的情况。不过谢谢!
  • 你能发个小提琴吗?
【解决方案3】:

使用toggle() 方法:

$('.nav__portfolio').on('click', function() {
   $('.nav__portfolio ul').toggle();
})
.nav__portfolio ul {
  display:none;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<li class="nav__portfolio"><p>PORTFOLIO</p>
  <ul>
    <li>Dropdown Item</li>
    <li>Dropdown Item</li>
    <li>Dropdown Item</li>
  </ul>
</li>

【讨论】:

  • 谢谢!这种方法大部分都有效。但是,在第一次单击时,
      不显示;它仅在第二次单击时显示。之后一切正常。反正有这个吗?
  • 我把css属性改成了display: none。告诉我它现在是否有效。
  • 不幸的是 :( 。使用 display: none,第二次点击甚至不再起作用,下拉列表不再出现。
猜你喜欢
  • 1970-01-01
  • 2010-11-18
  • 2020-11-04
  • 2015-09-08
  • 1970-01-01
  • 1970-01-01
  • 2017-02-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多