我有一个div
,想要在外面点击时隐藏它。我的代码是:
<div id="mydiv">The div must be above button</div>
$('#mydiv').click(function(e) {
e.stopPropagation();
});
$(document).click(function() {
$('#mydiv').fadeOut(300);
});
但这对我不起作用......
更新
完整代码如下所示。当我点击某个按钮时,它会在上方显示div
,因此当我点击外面时,我需要隐藏此div
。
<div id="but" style="text-align: right;"><button type="button">Show Div!</button></div>
<div id="mydiv" style="display:none;">The div must be above button</div>
$("#but button").click(function(){
var pos = $(this).offset(),
div = $("#mydiv");
// Make it visible off-page so
// we can measure it
div.css({
"display": "block",
"border": "1px solid black",
"position": "absolute",
"left": -10000,
"top": 0
});
// Move it where we want it to be
div.css({
"left": pos.left - 40,
"top": pos.top - div.height() - 10
});
});
$('#myDiv').click(function(e) {
e.stopPropagation();
});
$(document).click(function() {
$('#mydiv').fadeOut(300);
});
答案 0 :(得分:12)
在javascript中点击是bubbling event,它从 div 开始,然后转到文档。使用stopPropagation()
函数停止事件传播时,不会处理文档上的单击。因此,要解决您的问题,请删除e.stopPropagation()
。
最好的方法是:
$('#mydiv').click(function(e) {
e.stopPropagation();
$(this).fadeOut(300);
});
如果我点击这个div,如何点击外面并隐藏这个div ?
好吧,让我们想象一下,当你点击一个id为“wrapperId”的容器时,应该隐藏“myDiv”:
$("#wrapperId").click(function(e){
$('#mydiv').fadeOut(300);
})
如果容器是文档,则可以使用$(document)
代替$("#wrapperId")
。
看起来情况不正常:jsbin.com/ilowij/7
单击按钮时应停止单击事件传播。进行这些更改:
$("#but button").click(function(e){
e.stopPropagation();
...
}
答案 1 :(得分:8)
尝试使用以下检查事件目标的代码
$(document).click(function(e) {
if(e.target.id!="mydiv"){ // if click is not in 'mydiv'
$('#mydiv').hide(3000);
}
});
答案 2 :(得分:2)
比将click事件绑定到文档更好,您可以使用这种代码段:
$('#mydiv').click(function(e) {
e.stopPropagation();
})
.css({outline:0})
.focusout(function(){
$(this).fadeOut(300);
}).focus();
答案 3 :(得分:1)
尝试以下解决方案,这很简单,甚至可以递归工作:
$(document).mouseup(function(e)
{
var container = $("YOUR CONTAINER SELECTOR");
// if the target of the click isn't the container nor a descendant of the container
if (!container.is(e.target) && container.has(e.target).length === 0)
{
container.hide();
}
});
答案 4 :(得分:0)
检查一下
<a href="#" id="link">Click me</a>
点击显示或隐藏我
(function($) {
$("#link").click(function(e){
e.stopPropagation();
var div = $("#show_hide");
// Make it visible off-page
div.css({
"display": "block"
});
});
$(document).click(function(e){
$('#show_hide').fadeOut(300);
});
})(jQuery);
您可以查看此链接,例如..
答案 5 :(得分:0)
为什么只使用css3 target
<a href='#login'>Login</a>
<div id='login'>
blah blah blah
</div>
css:
#login{width:400px;height:600px;background:#fff;margin:10%
auto;position:absolute;left:0;right:0;
}
now we will hide the login box by putting a class on it
<div class='lightbox' id='login'>
</div>
css:
.lightbox{display:none;}
.lightbox:target{display:block;}
那些代码也不需要使用javascript
答案 6 :(得分:0)
最简单的方法是捕获文档的onclick事件。您知道此单击事件发生在您感兴趣的元素之外,然后返回false。 当菜单事件外部的点击触发时,我使用此技巧隐藏弹出菜单。
答案 7 :(得分:0)
$('html').click(function() {
$("div").css({"display": "none"});
});
$('.option').click(function(event){
event.stopPropagation();
});
$(".search").keyup(function(){
search=$(".search");
if(search.val()!= "" )
{
$("div").css({"display": "block"});
}
else
{
$("div").css({"display": "none"});
}
});
<input type="search" class="form-control search" name="search" autocomplete="off" >
<div>
</div>
这有助于隐藏
答案 8 :(得分:-1)
尝试.blur()
,并且像这样:
$('#mydiv').blur(function(e) {
$(this).fadeOut(300);
});
希望有所帮助