jquery - 带有 e.preventDefault()、e.stopPropagation() 的大型菜单 slideUp 和 slideDown,停止内部锚点单击
问题描述
这是大型菜单类型的设计,我希望它像现在正在做的手风琴一样工作,但问题在于内部锚点,它们现在不可点击。
$(document).ready(function() {
$(".megaMenu > li").click(function(e) {
if(e.target !== this){
return false;
}else {
$(".megaMenu > li").not(this).find(".subMenu:first").slideUp();
$(this).find(".subMenu:first").slideToggle();
e.preventDefault();
e.stopPropagation();
}
});
$(".subMenu > li").click(function(e) {
if(e.target !== this){
return false;
}else {
$(".subMenu > li").not(this).find(".subMenu:first").slideUp();
$(this).find(".subMenu:first").slideToggle();
e.preventDefault();
e.stopPropagation();
}
});
});
.megaMenu {
display: flex;
flex-direction: column;
}
.megaMenu>li {
margin: 10px 0;
padding: 10px;
background-color: #eaeaea;
cursor: pointer;
}
.megaMenu .subMenu {
display: none;
}
.megaMenu .subMenu li {
margin: 10px 0;
position: relative;
}
.megaMenu .subMenu li:after {
position: absolute;
right: 0;
top: 0;
content: ">";
}
.megaMenu .subMenu li a {
display: block;
width: 80%;
background-color: #ddd;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<ul class="megaMenu">
<li><a href="https://www.google.com/">Menu 1</a>
<ul class="subMenu">
<li><a href="https://www.google.com/">Sub Menu 1</a></li>
<li><a href="https://www.google.com/">Sub Menu 2</a></li>
<li><a href="https://www.google.com/">Sub Menu 3</a></li>
<li><a href="https://www.google.com/">Sub Menu 4</a></li>
</ul>
</li>
<li><a href="https://www.google.com/">Menu 2</a>
<ul class="subMenu">
<li><a href="https://www.google.com/">Sub Menu 1</a>
<ul class="subMenu">
<li><a href="https://www.google.com/">Sub_sub Menu 1</a></li>
<li><a href="https://www.google.com/">Sub_sub Menu 2</a></li>
<li><a href="https://www.google.com/">Sub_sub Menu 3</a></li>
<li><a href="https://www.google.com/">Sub_sub Menu 4</a></li>
</ul>
</li>
<li><a href="https://www.google.com/">Sub Menu 2</a>
<ul class="subMenu">
<li><a href="https://www.google.com/">Sub_sub Menu 1</a></li>
<li><a href="https://www.google.com/">Sub_sub Menu 2</a></li>
<li><a href="https://www.google.com/">Sub_sub Menu 3</a></li>
<li><a href="https://www.google.com/">Sub_sub Menu 4</a></li>
</ul>
</li>
<li><a href="https://www.google.com/">Sub Menu 3</a>
<ul class="subMenu">
<li><a href="https://www.google.com/">Sub_sub Menu 1</a></li>
<li><a href="https://www.google.com/">Sub_sub Menu 2</a></li>
<li><a href="https://www.google.com/">Sub_sub Menu 3</a></li>
<li><a href="https://www.google.com/">Sub_sub Menu 4</a></li>
</ul>
</li>
<li><a href="https://www.google.com/">Sub Menu 4</a>
<ul class="subMenu">
<li><a href="https://www.google.com/">Sub_sub Menu 1</a></li>
<li><a href="https://www.google.com/">Sub_sub Menu 2</a></li>
<li><a href="https://www.google.com/">Sub_sub Menu 3</a></li>
<li><a href="https://www.google.com/">Sub_sub Menu 4</a></li>
</ul>
</li>
</ul>
</li>
<li><a href="https://www.google.com/">Menu 3</a>
<ul class="subMenu">
<li><a href="https://www.google.com/">Sub Menu 1</a></li>
<li><a href="https://www.google.com/">Sub Menu 2</a></li>
<li><a href="https://www.google.com/">Sub Menu 3</a></li>
<li><a href="https://www.google.com/">Sub Menu 4</a></li>
</ul>
</li>
<li><a href="https://www.google.com/">Menu 4</a>
<ul class="subMenu">
<li><a href="https://www.google.com/">Sub Menu 1</a></li>
<li><a href="https://www.google.com/">Sub Menu 2</a></li>
<li><a href="https://www.google.com/">Sub Menu 3</a></li>
<li><a href="https://www.google.com/">Sub Menu 4</a></li>
</ul>
</li>
</ul>
这是第二个项目中带有子菜单的大型菜单,但是我编写的代码正在停止内部锚点单击,请帮我解决这个问题,我需要这个作为手风琴并且表现得和现在一样,但我还需要点击锚点
解决方案
你应该像这样编辑你的js。那是你想要的吗?
$(document).ready(function() {
$(".megaMenu > li").click(function(e) {
if(e.target == this){
$(".megaMenu > li").not(this).find(".subMenu:first").slideUp();
$(this).find(".subMenu:first").slideToggle();
}
});
$(".subMenu > li").click(function(e) {
if(e.target == this){
$(".subMenu > li").not(this).find(".subMenu:first").slideUp();
$(this).find(".subMenu:first").slideToggle();
}
});
});
.megaMenu {
display: flex;
flex-direction: column;
}
.megaMenu>li {
margin: 10px 0;
padding: 10px;
background-color: #eaeaea;
cursor: pointer;
}
.megaMenu .subMenu {
display: none;
}
.megaMenu .subMenu li {
margin: 10px 0;
position: relative;
}
.megaMenu .subMenu li:after {
position: absolute;
right: 0;
top: 0;
content: ">";
}
.megaMenu .subMenu li a {
display: block;
width: 80%;
background-color: #ddd;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<ul class="megaMenu">
<li><a href="https://www.google.com/">Menu 1</a>
<ul class="subMenu">
<li><a href="https://www.google.com/">Sub Menu 1</a></li>
<li><a href="https://www.google.com/">Sub Menu 2</a></li>
<li><a href="https://www.google.com/">Sub Menu 3</a></li>
<li><a href="https://www.google.com/">Sub Menu 4</a></li>
</ul>
</li>
<li><a href="https://www.google.com/">Menu 2</a>
<ul class="subMenu">
<li><a href="https://www.google.com/">Sub Menu 1</a>
<ul class="subMenu">
<li><a href="https://www.google.com/">Sub_sub Menu 1</a></li>
<li><a href="https://www.google.com/">Sub_sub Menu 2</a></li>
<li><a href="https://www.google.com/">Sub_sub Menu 3</a></li>
<li><a href="https://www.google.com/">Sub_sub Menu 4</a></li>
</ul>
</li>
<li><a href="https://www.google.com/">Sub Menu 2</a>
<ul class="subMenu">
<li><a href="https://www.google.com/">Sub_sub Menu 1</a></li>
<li><a href="https://www.google.com/">Sub_sub Menu 2</a></li>
<li><a href="https://www.google.com/">Sub_sub Menu 3</a></li>
<li><a href="https://www.google.com/">Sub_sub Menu 4</a></li>
</ul>
</li>
<li><a href="https://www.google.com/">Sub Menu 3</a>
<ul class="subMenu">
<li><a href="https://www.google.com/">Sub_sub Menu 1</a></li>
<li><a href="https://www.google.com/">Sub_sub Menu 2</a></li>
<li><a href="https://www.google.com/">Sub_sub Menu 3</a></li>
<li><a href="https://www.google.com/">Sub_sub Menu 4</a></li>
</ul>
</li>
<li><a href="https://www.google.com/">Sub Menu 4</a>
<ul class="subMenu">
<li><a href="https://www.google.com/">Sub_sub Menu 1</a></li>
<li><a href="https://www.google.com/">Sub_sub Menu 2</a></li>
<li><a href="https://www.google.com/">Sub_sub Menu 3</a></li>
<li><a href="https://www.google.com/">Sub_sub Menu 4</a></li>
</ul>
</li>
</ul>
</li>
<li><a href="https://www.google.com/">Menu 3</a>
<ul class="subMenu">
<li><a href="https://www.google.com/">Sub Menu 1</a></li>
<li><a href="https://www.google.com/">Sub Menu 2</a></li>
<li><a href="https://www.google.com/">Sub Menu 3</a></li>
<li><a href="https://www.google.com/">Sub Menu 4</a></li>
</ul>
</li>
<li><a href="https://www.google.com/">Menu 4</a>
<ul class="subMenu">
<li><a href="https://www.google.com/">Sub Menu 1</a></li>
<li><a href="https://www.google.com/">Sub Menu 2</a></li>
<li><a href="https://www.google.com/">Sub Menu 3</a></li>
<li><a href="https://www.google.com/">Sub Menu 4</a></li>
</ul>
</li>
</ul>
推荐阅读
- javascript - 调用函数时在我的 JS 代码中未捕获的 SyntaxError
- java - 如何使用 ASM 实现“抛出 InterrruptedException”?
- java - Java 模块路径参数混淆
- javascript - 我遇到了这个错误“道具地图错误”
- c++ - 在Boost.Geometry中将两个多边形组合成一个多边形:只有外点,没有洞
- batch-file - 命令行 - “此时 x 出乎意料”
- wordpress - 如何修改 wordpress docker 卷中的文件?
- flask - 同一个按钮如何发送表单并重定向到 Stripe 结帐?
- python - 使用python shell脚本调用redshift存储过程
- javascript - React Native / Firebase - 创建唯一的用户名