jQuery隐藏元素在使用CSS显示时保持隐藏状态
jQuery hidden element stays hidden when showing with CSS
我有一个具有display:none
属性的元素。现在,如果用户悬停在父对象上,它将显示:
.item:hover .description {
display: block;
z-index: 1;
}
现在,当我执行时
$(".description").hide()
要再次隐藏元素(用户可以单击元素中的X关闭它),如果用户再次将鼠标悬停在父元素上,则该元素将不会再次显示。它一直隐藏着。
如何避免css的显示和隐藏函数出错?
您给出代码的方式是将CSS和JavaScript混合在一起。jQuery使用内联样式来完成.hide()
或show。inline-styles
比CSS更具体。要么使用class
es并切换它们,要么只使用JavaScript。
我会这样做:
.item:hover .description {
display: block;
z-index: 1;
}
.item .description {
display: none;
}
上面是一个纯CSS方法。但是使用JavaScript时,我会考虑使用toggleClass()
而不是.hide()
或.show()
。
.item:hover .description {
display: block;
z-index: 1;
}
.item .description.hidden {
display: none;
}
在JS中:
$(".description").addClass("hidden");
当你想显示它时,你可以随时使用:
$(".description").removeClass("hidden");
对于切换内容,您可以使用:
$(".description").toggleClass("hidden");
hide
将添加一个内联样式来隐藏元素,在这种情况下,它将覆盖CSS样式。
如果您使用JavaScript来隐藏元素,则需要在不再相关时使用JavaScript来删除该内联样式。我会在.item
上使用mouseleave
事件处理程序,并使用一个类来隐藏description
:
CSS:
.item:hover .description.hide {
display: none;
}
点击X:时隐藏描述
$(".item .description").addClass("hide");
当用户不再悬停在.item
:时删除
$(".item").on("mouseleave", function() {
$(this).find(".description.hide").removeClass("hide");
});
可以使用如上所述的直接处理程序,也可以使用事件委派(我在下面的示例中使用委派)。
实时示例:
// Hide when X clicked
$(document.body).on("click", ".item .description .close", function() {
$(this).closest(".description").addClass("hide");
});
// Reset when user no longer hovering
$(document.body).on("mouseleave", ".item", function() {
$(this).find(".description.hide").removeClass("hide");
});
.item .description {
display: none;
}
.item:hover .description {
display: block;
z-index: 1;
}
.item:hover .description.hide {
display: none;
}
/* The following are just for the demo */
.close {
cursor: pointer;
}
.item {
position: relative;
height: 2em;
border: 1px solid black;
}
.item .description {
position: absolute;
background-color: #eee;
left: 10em;
top: 2px;
border: 1px solid #ddd;
}
<div class="item">
I'm item 1
<div class="description">
I'm description 1
<span class="close">[x]</span>
</div>
</div>
<div class="item">
I'm item 2
<div class="description">
I'm description 2
<span class="close">[x]</span>
</div>
</div>
<div class="item">
I'm item 3
<div class="description">
I'm description 3
<span class="close">[x]</span>
</div>
</div>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
这是因为在JS隐藏此元素时,您将visibility:hidden设置为它。在下一次关注父元素后,您将不会设置visibility:visible,这是必需的。
例如,您可以执行
$(".description").show()
在下一次关注父元素之后
相关文章:
- 在mvc应用程序中,在回发时保留最初隐藏的文本框的隐藏或可见状态
- 检查元素是否将状态从隐藏更改为可见
- jQuery隐藏元素在使用CSS显示时保持隐藏状态
- 在表重新加载后,使用setInterval保持表的显示-隐藏状态
- 保持状态打开”;在背景中”;.隐藏,但不要't在Angular UI中离开状态
- 如何使用jQuery检查切换的隐藏状态
- 将表的隐藏状态更改为可见状态>点击TR
- 谷歌地图叠加层消息不会保持隐藏状态
- 浏览器状态栏:隐藏对特定网站的请求地址
- 当鼠标悬停在链接上时,从 href URL 中隐藏状态栏值
- 在iCheck的复选框选中和未选中状态下显示和隐藏另一个复选框
- 使用Phonegap Build隐藏Android中的状态栏
- 如何将 phonegap 2.9.0 更新到 3.0 或在 phonegap 应用程序中隐藏状态栏
- 高图表工具提示溢出处于隐藏状态
- 单击按钮,侧边菜单从隐藏状态滑出
- Division赢得'返回页面javascript后不要保持隐藏状态
- 在Firefox中隐藏状态栏
- 当元素在Javascript中可见时,它会切换回隐藏状态
- 隐藏框在页面加载时保持隐藏状态
- 隐藏输入在应用CSS类时不会保持隐藏状态