[英]Hide popover on body click only if already visible
Hiding a div (for example #popover
) on click is easy: 在点击时隐藏div(例如
#popover
)很容易:
$(document).ready(function() {
$("#trigger").click(function(e) {
$("#popover").toggle();
e.stopPropagation();
});
$(document).click(function(e) {
if (!$(e.target).is('#popover, #popover *')) {
$("#popover").hide();
}
});
});
But isn't this function fired every time the user uses a click
? 但是,不是用户每次
click
都触发此功能吗? (Which does not make sense for me). (这对我来说没有意义)。 Can I somehow limit this function to fire only if
#popover
is already visible? 我能否以某种方式将此功能限制为仅在
#popover
已经可见的情况下才能触发?
In that case you can try using $(document).one(function(e) {...});
在这种情况下,您可以尝试使用
$(document).one(function(e) {...});
every time you show #example
. 每次显示
#example
。
$(document).ready(function() {
var didBindToBody = false;
function closePopOverOnBodyClick() {
didBindToBody = true;
$(document).one('click', function(e) {
if (!$(e.target).is('#popover, #popover *')) {
$("#popover").hide();
}
else {
closePopOverOnBodyClick();
}
didBindToBody = false;
});
}
$("#trigger").click(function(e) {
$("#popover").toggle();
e.stopPropagation();
if (!didBindToBody && $("#popover").is(":visible")) {
closePopOverOnBodyClick();
}
});
closePopOverOnBodyClick();
});
You could try something like 您可以尝试类似
$(document).click(function(e) {
if (!$('#example').is(":visible")) {
return false;
} else if (!$(e.target).is('#popover, .login-panel *')) {
$("#popover").hide();
}
});
Or you could combine the two conditionals into one, just thought I'd keep it separate for readability and to make my suggestion easier to spot. 或者,您可以将这两个条件组合为一个,只是为了提高可读性并使我的建议更容易理解而将其分开。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.