2011-07-01 64 views
1

我有一个<ul>与大量<li>的它下面。其中每个<li>的内都有一个隐藏的<div class=dbox">。为<li>的和它们的内容的结构/层次是:JQuery隐藏元素不工作

- >利
---->可见的内容(H3,IMG,P等)
---->隐藏的div .dbox
-------> div.photos
-------> div.specs

当点击<li>的图像(总是可见),<div class="dbox">然后给定显示器=块。到现在为止还挺好。然后我搜索了网页,以便在点击外部时关闭.dbox。我得到这个工作:

var mouse_is_inside = false; 

    $('.dbox').hover(function(){ 
     mouse_is_inside=true; 
    }, function(){ 
     mouse_is_inside=false; 
    }); 

    $("body").mouseup(function(){ 
     if(! mouse_is_inside) $('.dbox').hide(); 
    }); 

点击外部.dbox现在使其关闭。到现在为止还挺好。下一步是添加了“关闭此窗口按钮,但高科技,萨维用户,所以,在<div class="specs">内,我加了最后一个元素,<span class="close">然后递给了这个jQuery代码:

$('span.close').click(function() { 

     $(this).parent().parent().hide(); 

    }); 

,没有工作。我与父母进行了测试('。dbox'),但它也没有工作。有趣的是,它只有当我的目标.dbox隐藏不起作用。如果我这样做:

$(this).parent().hide(); 

这将关闭包含分区,<div class="specs">,它的工作原理,有效地关闭<div class="specs">

我则认为有某种冲突与“外单击”代码,以便我把它删除了,错误依然存在......这让我在这里问你有关这种困境的知识型研究员。

在此先感谢 G.Campos

+0

我得到它的工作:$(this).parents('。dbox')。隐藏(1); 只有当hide()为空时才会发生任何事情。添加1或任何数字的窍门。为什么它不是0虽然? – Sotkra

+2

如果你在http://jsbin.com/或者http://jsfiddle.net/ – Acorn

+0

@Sotkra上举个例子,它会有所帮助:你能否确认在“li”时显示“dbox”'div'?点击_image_而不是点击'li'本身? –

回答

1

我得到它的工作:$(this).parents('.dbox').hide(1); 只有当隐藏()是空的,没有什么会发生。添加1或任何数字的窍门。为什么它不是0虽然?

0

一种解决方案是,你可以在onMouseLeave事件处理程序中设置mouse_is_inside=false;

另一种解决方案就是连接你的事件处理程序是这样的:

$('.dbox').click(function(e) { 
    // do stuff 
    // ... 

    // this will prevent the event from bubbling upto body's eventhandler 
    e.stopPropagation(); 
}); 

$('body').click(function(e) { 
    $('.dbox').hide(); 
}); 

而且,本应关闭父DBOX格:

$('.dbox span.close').click(function() { 
    $(this).parents('.dbox').hide(); 
}); 
0

您可以mouse_inside使用blur而不是你的绝招。

此外,您可以使用带有选择器的parents而不是parent().parent()

最大

0

尝试

$(this).parent().parent().parent().hide(); // for button