javascript - 如何检查是否隐藏?
问题描述
When selector A is clicked or outside of selector BI want selector B to .toggle()
. 这很简单。
但是,除非单击选择器 A,否则我不希望选择器 B.toggle()
后退——而不是在您单击选择器 A 或 B 外部时。这是我无法弄清楚的部分。
$(document).ready(function() {
var Container = $(".redBar"); // Container (selector A)
function Toggle() {
Container.toggleClass("hide"); // Toggle Container with display none selector [to hide selector B]
}
// If selector B is visible
if ($(Container).is(":visible")) {
// On click of the document and selector A
$(document, ".toggleBar").on("click", function(event) {
// If the target of the click isn't selector A nor a descendant of selector A
if (!Container.is(event.target) && Container.has(event.target).length === 0) {
Toggle();
}
});
}
});
/* Selector A */
.toggleBar {
width: 150px;
color: blue;
text-transform: uppercase;
font-weight: bold;
}
.toggleBar:hover {
text-decoration: underline;
cursor: pointer;
}
/* Selector B */
.redBar {
width: 300px;
height: 50px;
color: white;
text-transform: uppercase;
font-weight: bold;
background-color: red;
}
.hide {
display: none;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="redBarContainer">
<!-- selector A -->
<div class="toggleBar">toggle bar</div>
<!-- selector B -->
<div class="redBar"></div>
</div>
代码笔: https ://codepen.io/brilliantmojo/pen/GRoyrKg
解决方案
根据您要执行的操作的描述,一种更简单的方法是将toggle()
调用附加到.toggleBar
元素的单击,然后仅hide()
在元素外部发生单击时,如下所示:
jQuery($ => {
let $redBar = $('.redBar');
$('.toggleBar').on('click', e => {
e.stopPropagation();
$redBar.toggle();
});
$(document).on('click', (e) => {
if ($redBar[0] !== e.target)
$redBar.hide();
});
});
/* Selector A */
.toggleBar {
width: 150px;
color: blue;
text-transform: uppercase;
font-weight: bold;
}
.toggleBar:hover {
text-decoration: underline;
cursor: pointer;
}
/* Selector B */
.redBar {
width: 300px;
height: 50px;
color: white;
text-transform: uppercase;
font-weight: bold;
background-color: red;
}
.hide {
display: none;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="redBarContainer">
<!-- selector A -->
<div class="toggleBar">toggle bar</div>
<!-- selector B -->
<div class="redBar"></div>
</div>
推荐阅读
- python - 获取python中的代码行总数?
- javascript - 为什么 Google Calendar API 忽略 timeZone 参数?
- python-3.x - 试图理解“TypeError:需要一个类似字节的对象,而不是'str'”
- c - 如何在 Windows 10 上将模拟击键发送到 Steam 游戏?
- inno-setup - 从 Inno Setup 安装后运行部分条目打开 HTML 页面
- javascript - div 标签翻译,我不知道为什么
- matlab - 如何使用分类数据显示包含重复值的排序条形图
- java - 为什么 ServletContext.getResourceAsStream 方法在 Java Web 应用程序中返回 null?
- django - 确定用户的 Django 权限行表
- css - 带有 CSS 网格的 IMG 画廊