javascript - Jquery 切换不会在第二次单击时关闭
问题描述
我有需要在 3 层中显示和隐藏子菜单的大型菜单。
当我使用 jquerytoggle
打开和隐藏第二个子菜单(第二列)时,它可以正常工作,但是当我使用相同的代码打开和隐藏第三个子菜单(第三列)时,它会打开但从不隐藏。
有谁知道似乎是什么问题?
我希望有:
单击选项 1 => 显示选项 1.1
单击选项 1.1 => 显示选项 1.1.1
第二次单击选项 1 => 隐藏选项 1.1 和选项 1.1.1
第二次单击选项 1.1 => 隐藏选项 1.1.1
html代码:
<div>
<!-- FIRST COLUMN -->
<div>
<a class="first-link" href="#">option 1</a>
<a class="second-link" href="#">option 2</a>
</div>
<!-- SECOND COLUMN -->
<div class="submenu-1 option" style="display:none;">
<div>
<a class="submenu-first-element" href="#">option 1.1</a>
</div>
<div>
<a class="submenu-second-element" href="#">option 1.2</a>
</div>
</div>
<div class="submenu-2 option" style="display:none;">
<div>
<a class="submenu-2-first-element">option 1.1</a>
</div>
</div>
<!-- THIRD COLUMN -->
<div class="first-preview hide-div" style="display:none;">
<a>option 1.1.1</a>
</div>
<div class="second-element hide-div" style="display:none;">
<a>option 1.1.2</a>
</div>
<div class="third-element hide-div" style="display:none;">
<a>option 1.2.1</a>
</div>
</div>
jQuery代码:
//second column
$('.first-link').on('click', () => {
$('.option').hide();
$('.submenu-1').toggle();
});
$('.second-link').on('click', () => {
$('.option').hide();
$('.submenu-2').toggle();
});
//third column
$('.submenu-first-element').on('click', () => {
$('.hide-div').hide();
$('.first-preview').toggle();
});
$('.submenu-first-element').on('click', () => {
$('.hide-div').hide();
$('.second-element').toggle();
});
$('.submenu-second-element').on('click', () => {
$('.hide-div').hide();
$('.third-element').toggle();
});
解决方案
我想这就是你所期望的。将您的 div 移动到更靠近父级的位置,通过一键式事件,您可以实现两者。
//second column
$('.first-link').on('click', () => {
//$('.option').hide();
$(".submenu-2").hide();
$('.submenu-1').toggle();
});
$('.second-link').on('click', () => {
//$('.option').hide();
$(".submenu-1").hide();
$('.submenu-2').toggle();
});
//third column
$('.submenu-first-element').on('click', () => {
//$('.hide-div').hide();
$('.first-preview').toggle();
$('.second-element').toggle();
});
//on single click it can be done, no need to repeat the function
//$('.submenu-first-element').on('click', () => {
// $('.hide-div').hide();
//});
$('.submenu-second-element').on('click', () => {
//$('.hide-div').hide();
$('.third-element').toggle();
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div>
<!-- FIRST COLUMN -->
<div>
<a class="first-link" href="#">option 1</a>
<a class="second-link" href="#">option 2</a>
</div>
<!-- SECOND COLUMN -->
<div class="submenu-1 option" style="display:none;">
<div>
<a class="submenu-first-element" href="#">option 1.1</a>
</div>
<div class="first-preview hide-div" style="display:none;">
<a>option 1.1.1</a>
</div>
<div class="second-element hide-div" style="display:none;">
<a>option 1.1.2</a>
</div>
<div>
<a class="submenu-second-element" href="#">option 1.2</a>
</div>
<div class="third-element hide-div" style="display:none;">
<a>option 1.2.1</a>
</div>
</div>
<div class="submenu-2 option" style="display:none;">
<div>
<a class="submenu-2-first-element">option 1.2</a>
</div>
</div>
<!-- THIRD COLUMN -->
</div>
推荐阅读
- angular - 刷新后保持选中的复选框
- .net - 如何将此列表限制为仅 AutoCAD 中的图纸空间布局?
- intellij-idea - 如何为 intellij 正确设置 adb/PATH
- typescript - 要联合的类数组(反之亦然)
- java - 当字符属性更改时,Java JTextPane 不会更新其大小
- bash - 使用 sudo 和 awk 进行 Bash while 循环
- python - 是否可以在 PysimpleGui 表中插入复选框?
- microsoft-graph-api - 从 Teams 获取活跃的 PSTN 来电显示
- android - 在推送通知中显示视频、gif 或横幅
- c - POSIX 的 FTW 结构成员 - 他们告诉我们什么?