2014-11-20 64 views
-2

我正在使用jQuery的切换方法在单击另一个页面元素时隐藏/显示页面元素。如何通过单击除元素之外的任何位置隐藏元素

jQuery('a#mobile-search-icon).click(function(){ 
    jQuery(‘#searchBox’).toggle('slow'); 
}); 

但除此之外,如果用户单击文档中除该元素外的任何地方,我希望该元素淡出。什么是一行代码来使用它?

我的伪代码会读像,...

$(‘anywhere except #searchBox’).click(function(){ 
    $(‘#searchBox’).fadeOut(); 
}) 

我知道有一个jQuery不是选择,但我更愿意使用别的东西。不选择器的处理器密集度太高。

+2

可能重复[使用jQuery在用户点击它时隐藏DIV](http://stackoverflow.com/questions/1403615/use-jquery-to-hide-a-div-when-the-user-clicks-outside它的) – George 2014-11-20 20:34:31

+1

甚至有一个社区维基答案为此:http://stackoverflow.com/questions/152975 – Mathletics 2014-11-20 20:43:05

回答

1

检查整个文档的点击次数。如果点击的目标不是你的元素,那就做你该做的。

$(document.body).click(function(e) { 
    if ($(e.target).attr('id') != 'searchBox') { 
     $('#searchBox').fadeOut(); 
    } 
}) 

呼应约翰·史密斯的完整性:

$(document.body).not("#searchBox").click(function() { 
    $('#searchBox').fadeOut(); 
}) 
+0

不应该有一个!运营商在那,如果有条件?因为他想单击除元素之外的任何位置。糟糕,看起来你改变了它,而我正在评论;) – 2014-11-20 20:23:39

+0

@EricGuan yessir,我正在修复,因为你评论:)谢谢 – 2014-11-20 20:24:11

+0

也可以使用'on()'函数创建完全为节点比较。 ref:http://api.jquery.com/is/ – 2014-11-20 20:39:20

0

你可以使用

$('body').on('click',function() 
{ 
    $('.notwanttotriggerhideclass').fadeOut();//hide your element 
}) ; 

,然后返回上选择错误,你不想隐瞒:

$('.notwanttotriggerhideclass').on('click',function() 
{ 

    return false; 

}); 

或检测课程在点击功能和身体隐藏类:

$('body').on('click',function() 
{ 
    if ($(e.target).attr('class') != 'notwanttotriggerhideclass')) 
    { 
     $('.notwanttotriggerhideclass').fadeOut();//hide your element 
    } 

}) ; 
+0

为什么你在这种携带符号中使用'on()'函数(我的意思是$('body')。)('click'..)?只是有趣的 – 2014-11-20 20:35:20

+0

你是什么意思? @GlenSwift – RobertoNovelo 2014-11-20 21:25:22

+0

我的意思是这个http://stackoverflow.com/revisions/27048897/1 – 2014-11-21 08:56:22

0

假设取消输入标签,当您使用此行为,您正在寻找的“模糊”事件:

$("#searchBox").blur(function() { 
    $(this).fadeOut(); 
}); 

这也很火当用户使用输入标签并按下TAB时,例如超酷。

编辑:没那么糟糕的方式做到这一点,你不使用的输入会是这样的假设:

$('body').not("#searchBox").click(function() { $("#searchBox").fadeOut(); }); 
+0

关注为什么'.not()'会“真的很糟糕”? – mc01 2014-11-20 20:38:59

+0

@ mc01'.not()'并不是真的很糟糕......这个答案用来表示“body *”作为选择器。使用'*'是“真的很糟糕” – 2014-11-20 20:45:27

+0

好的 - 这样做更有意义:) – mc01 2014-11-20 20:51:05

0

使用“不”,如:

$(document.body).not("#searchBox").on("click", someFunction...