简体   繁体   English

单击后,使菜单消失在菜单上。 “显示”有效,但“隐藏”无效

[英]On click, making a menu disappear on menu. The “show” works, but the “hide” doesn't

I have a portfolios item inside my menu, which then becomes a dropdown menu on hover for desktop and click for mobile. 我的菜单中有一个项目组合项目,然后该项目成为悬停在桌面上的下拉菜单,并单击移动。 The problem with mobile is that the first click shows the menu, which is all good, but the next clicks don't change anything. 移动设备的问题在于,第一次单击会显示菜单,这一切都很好,但是接下来的单击不会改变任何内容。

I've tried .toggle() , .toggleClass() , both of which don't seem to work. 我已经尝试过.toggle() .toggleClass() .toggle().toggleClass()两个似乎都不起作用。 I'm currently testing out an if/else statement, shown in the JavaScript below. 我目前正在测试if / else语句,如下面的JavaScript所示。 "If the window width is less than 940px"... and then "if the current visibility is hidden , change it to visibility: visible on click of the parent" and vice versa for the else. “如果窗口宽度小于940px”,然后“如果hidden了当前visibility ,则将其更改为visibility: visible单击父级时visibility: visible ”,反之亦然。

Edit: 编辑:

I'm only testing this in browser windows that are less than 940px to emulate the "mobile" experience. 我仅在小于940px的浏览器窗口中对此进行测试,以模拟“移动”体验。

Edit #2: 编辑#2:

I removed the if window width < 940px for the purposes of this question since it might be easier to respond to that way? 我出于这个问题的目的删除了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> 

I guess your main problem is the condition you pass to the if statement: 我想您的主要问题是您传递给if语句的条件:

  • $('.nav__portfolio ul').css('visibility', 'hidden') isn't a boolean so it doesn't return true or false $('.nav__portfolio ul').css('visibility', 'hidden')不是布尔值,因此不会返回truefalse

What you can do is compare the actual value for that css property like this: 您可以做的是像这样比较该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> 


This logic on your actual code will be something like: 您实际代码上的此逻辑将类似于:

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

With the toggle() method: 使用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> 

Have you tried hasClass/addClass/removeClass instead? 您是否尝试过hasClass / addClass / removeClass?

probably only need one click listener 大概只需要一键式监听器

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM