如果在外部单击,则隐藏弹出窗口.为什么我的脚本没有'不起作用

Hiding popup if click was made outside. Why my script doesn't work?

本文关键字:脚本 我的 不起作用 为什么 窗口 单击 外部 隐藏 如果      更新时间:2023-10-27

我在这里找到了一个解决方案,在stackoverflow上,脚本如下:

jQuery(document).mouseup(function (e){
    var container = jQuery(".quick-info");
    if (container.has(e.target).length === 0) {
        container.hide();
    }
});

我的尝试是:

jQuery('body:has(.quick-info:visible):not(.quick-info)').click(function (e) {
    jQuery(".quick-info").hide();
});

所以我的脚本的意思是:点击身体,但没有点击。快速信息,身体有。快速信息可见。可能是什么问题?可能是选错了?

更新1

基于Raminson的回答

jQuery('body>*:not(.squick info)')。点击(函数(e){var container=jQuery(".wicket info");if(container.has(e.target).length===0&&e.target.nodeName!='A'){jQuery(".squick info").hide();}});

因此,只选择>一个选择器。

e.target.nodeName!='A'表示链接,该链接将打开此窗口。我知道,我可以在那里上课什么的。

或者:

jQuery('body:has(.quick-info:visible)').click(function (e){
    if($(e.target).is(".quick-info")) return;
    jQuery(".quick-info").hide();
});
//if($(e.target).hasClass("quick-info")) return;

基于VisioN的评论和THIS post hasClass()更喜欢is()

我在尝试让"点击外部"逻辑工作时遇到了很多问题。我看到了这个插件:http://benalman.com/projects/jquery-outside-events-plugin/为我解决了所有问题。您只需将事件绑定到元素上。你可以试一试,即使我看到你已经解决了自己的问题。

尝试以下操作:

$(document).on("click", function(e) {
  if (!$(e.target).hasClass("quick-info") && $('.quick-info').is(':visible')) {
     $(".quick-info").hide();
  }
});

演示