这是我的方法:
document
当用户单击任何位置时,您需要一个事件侦听器来隐藏该框。但是当盒子被隐藏时,事件监听器不是必需的,所以 - 它只能在盒子显示时添加,例如:
var box = $('#trigger-box'),
showBox = function (e) {
if (!box.is(':visible')) { // only do that when box is hidden
e.stopPropagation(); // required to prevent document
box.show();
$(document).on('click.showBox', hideBox); // event namescope for easy removal
}
},
然后 - 当盒子隐藏时 - 我们可以删除这个事件监听器,如下所示:
var hideBox = function (e) {
var target = $(e.target);
if (target.is(box) || target.closest(box).length) return; // don't close if clicked on box or on anything inside the box
$(document).off('click.showBox');
box.hide();
}
然后 - 我们可以添加事件监听器:
$('#trigger-button').on('click', showBox);
演示