javascript - 双击子菜单设备

标签 javascript html css

我的问题有一些解决方案,但效果不佳。我想点击打开菜单的元素(+ 添加类(class)打开),然后当我再次点击某处链接时。

$('.nav > ul > li').on('mouseenter', function() {
  $(this).addClass('open')
  console.log('mouseenter');
}).on('mouseleave', function() {
  $(this).removeClass('open')
})

$('.nav > ul > li > a').on('click', function(e) {
  var li = $(this).parent();
  console.log('click');
  if (!li.hasClass('open')) {
    li.addClass("open");
    e.preventDefault();
  }
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="nav">
  <ul>
    <li><a href="link1.html">main1</a>
      <ul>
        <li><a href="link1.html">link1</a></li>
        <li><a href="link2.html">link2</a></li>
        <li><a href="link3.html">link3</a></li>
        <li><a href="link4.html">link4</a></li>
      </ul>
    </li>
    <li><a href="link2-1.html">main2</a>
      <ul>
        <li><a href="link2-1.html">link1</a></li>
        <li><a href="link2-2.html">link2</a></li>
        <li><a href="link2-3.html">link3</a></li>
      </ul>
    </li>
  </ul>
</div>

最佳答案

e.preventDefault(); 应该在函数的开头。

$('.nav > ul > li').on('mouseenter', function() {
  $(this).addClass('open')
  console.log('mouseenter');
}).on('mouseleave', function() {
  $(this).removeClass('open')
})

$('.nav > ul > li > a').on('click', function(e) {
  e.preventDefault();
  var li = $(this).parent();
  console.log('click');
  if (!li.hasClass('open')) {
    li.addClass("open");
    
  }
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="nav">
  <ul>
    <li><a href="link1.html">main1</a>
      <ul>
        <li><a href="link1.html">link1</a></li>
        <li><a href="link2.html">link2</a></li>
        <li><a href="link3.html">link3</a></li>
        <li><a href="link4.html">link4</a></li>
      </ul>
    </li>
    <li><a href="link2-1.html">main2</a>
      <ul>
        <li><a href="link2-1.html">link1</a></li>
        <li><a href="link2-2.html">link2</a></li>
        <li><a href="link2-3.html">link3</a></li>
      </ul>
    </li>
  </ul>
</div>

关于javascript - 双击子菜单设备,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57248808/

相关文章:

jquery - ng 无限滚动中的 div 标签高度导致问题

javascript - 如何创建可以与之交互的自动显示弹出窗口

javascript - typescript -错误 TS1146 : Declaration expected

javascript - Vue 传递 inputfield 的值以及对该对象的引用

html - 使用 Bootstrap 水平平铺 Div 标签并在点击时最大化

javascript - 我在一个页面中创建多个 slider ...但如果幻灯片的数量彼此不同,则无法获得正确的停止位置

javascript - SetData() 不适用于更改事件 HighCharts 饼图

javascript - 使用 querySelector 查找后代元素返回意外结果

html - 将背景图像缩放到元素大小

css - 在 native react 中放置没有绝对位置的 View