1

我在这里找到了一个解决方案,在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();
});

所以我的脚本意味着:捕捉在 body 上而不是在 .quick-info 上的点击,并且 body 有 .quick-info 可见。可能是什么问题?可能是一些错误的选择器?

更新 1

基于拉明森的回答。

jQuery('body > *:not(.quick-info)').click(function (e) {    
    var container = jQuery(".quick-info");
    if (container.has(e.target).length === 0 && e.target.nodeName != 'A'){
    jQuery(".quick-info").hide();
    }

});

因此,只有 > 选择了单个选择器。

e.target.nodeName != 'A' 用于链接,打开此窗口。我知道,我可以在那里上课或其他东西。

4

3 回答 3

0

或者 :

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 评论和这篇文章 hasClass() 更喜欢 is()

于 2012-07-18T06:24:24.700 回答
0

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

于 2012-07-18T08:16:31.643 回答
0

尝试以下操作:

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

演示

于 2012-07-18T06:19:31.880 回答