我正在使用jquery slidetoggle,想要了解如何在点击DIV之外的任何地方时隐藏showup
类。
谢谢!
在线示例:http://jsfiddle.net/evGd6/
<div class="click">click me</div>
<div class="showup">something I want to show</div>
$(document).ready(function(){
$('.click').click(function(){
$(".showup").slideToggle("fast");
});
});
.showup {
width: 100px;
height: 100px;
background: red;
display:none;
}
.click {
cursor: pointer;
}
答案 0 :(得分:35)
停止.showup
区域内的事件传播:
$(document).on("click", function () {
$(".showup").hide();
});
然后阻止.showup
上的点击冒泡到document
:
$(".showup").on("click", function (event) {
event.stopPropagation();
});
任何到达document
的点击事件都会导致.showup
元素被隐藏。任何从.showup
开始的点击事件都将无法继续进行DOM树,因此永远不会到达document
。
您还需要停止对按钮的任何点击,直至document
:
$(".click").on("click", function (event) {
event.stopPropagation();
$(".showup").slideToggle("fast");
});
否则该点击事件将冒出document
并导致立即隐藏.showup
。
答案 1 :(得分:0)
如果您仍然想记录.showup
面板上的点击(假设您希望它比一个简单的信息面板更多),则在点击它时调用event.stopPropagation()
将使该面板不可触摸/无用。请改用event.cancelBubble = true
,让事件发生在.showup
个孩子上。
$('.click').click(function(){
$(".showup").toggle();
});
$(".showup").on("click", function (/*nothing here*/) {
event.cancelBubble = true
});
$(document).on("click", function () {
$(".showup").hide();
});