这是我想要做的事情。 我已经创建了一个jsfiddle,所以你可以看看,让我知道如何做我想要的。
$(document).ready(function() {
$('#trigger-button').click( function () {
$('#trigger-box').toggle();
});
});
就代码而言,它工作得很好。 单击按钮会触发一个框以显示和消失。工作正常。
但我想要的是如果有人点击按钮并出现方框,则该方框可以通过2种方法消失。
答案 0 :(得分:2)
这是我的方法:
当用户点击任意位置时,您需要一个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);
答案 1 :(得分:1)
听取文档级别的点击,并过滤掉按钮或框上的任何点击:
$(document).ready(function () {
$('#trigger-button').click(function () {
$('#trigger-box').toggle();
});
$(document).on('click', function(e) {
if ( !$(e.target).closest('#trigger-box, #trigger-button').length )
$('#trigger-box').hide();
});
});