javascript - jQuery:单击主体而不是元素本身时隐藏()框?

标签 javascript jquery

我有一个 <a href="#" id="btn">Show Box</a>在我的 DOM 中的某个地方。另外我有一个 div#overlay默认设置为 display:none; .

// Toggle Overlay
$('#btn').click(function(e) {
    e.preventDefault();
    $('#overlay').toggle();
})

$('body').not('#btn, #overlay').click(function() {
    if ( $('#overlay').is(':visible') ) $('#overlay').hide();
});

为什么这不起作用?我想要 #btn toggle() 单击叠加层。但是,当叠加层可见并且我单击文档上的任意位置(#btn 本身或 #overlay 除外)时,我希望叠加层也被隐藏。

最佳答案

您正在捕获 body 上的 click,它本身是 never #btn# overlay,因此它无法按预期工作。您需要检查的是 event.target

$('body').click(function(e) {
    var target = $(e.target);
    if(!target.is('#btn') && !target.is('#overlay')) {
       if ( $('#overlay').is(':visible') ) $('#overlay').hide();
    }
});

关于javascript - jQuery:单击主体而不是元素本身时隐藏()框?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15386686/

相关文章:

javascript - 将更改监听器附加到循环中的 jquery-chosen 选择,不起作用

javascript - 从 setTimeout 调用时,函数无法在 IE7 和 IE8 中正常工作

javascript - 通过rails-assets-pipeline使用jcountdown时,未捕获类型错误: $(. ..).countdown不是函数```

javascript - 如果 json 请求返回下一个链接为 "next",则隐藏 "false"链接

jquery - 在滚动条上运行 jQuery 数字计数器

javascript - JS : Fastest way to push console output to client

javascript - AWS 从客户端上传文件到 S3

javascript - 强大 - PUT 错误

javascript - rails 5 : dynamic table ID access in Coffeescript

jquery - 我应该在 $() 和 jQuery() 之间使用什么?