2010-09-23 90 views
1

问题在主题。jquery:防止点击div内关闭它...所有元素

样品

<div id="trigger">click here</div> 
<div id="slider"> content goes here: form elems, divs, spans, a etc. </div> 

如何做呢到目前为止

$(document.body).click(function(event){ 
     var target = $(event.target); 
      if (!target.is("#trigger") && !target.is("#slider") && [all elems in slider.div...] 
} 

我尽力去完成什么:
避免列出所有slider.div elems的ID - 如果可能的话。
允许滑块div内的id =“close”这样的div与div一样关闭它。

+0

你想要的按钮滑块关闭时消失,还是希望按钮保持可见状态,以便可以多次打开和关闭滑块? – 2010-09-24 15:42:24

回答

2

这可以通过多种方式完成,但我最喜欢的是命名触发器,如slider_1,并给它一个类,如果.slider。然后给实际的滑块一个slider_1_content的ID与一个类如果.slider_content。这将允许你写类似:

$(".slider").click(function() { 
    $("#" + this.attr("id") + "_content") ... 
}); 

然后,您可以指定一个close类的关闭按钮/链接,并迫使他们关闭父滑块一样:

+0

[**'.closest()'**](http://api.jquery.com/closest/)will,'“获取匹配选择器的第一个祖先元素,从当前元素开始, DOM树。“OP的元素是**兄弟**而不是后代。 ------另外,如果父母是滑块,该按钮将消失。你可以使用'.find()'作为父按钮和子滑块。 – 2010-09-23 21:47:53

+0

'.close'按钮/链接将是一个后代而不是兄弟姐妹。我发布的第一段代码解决了触发器/滑块问题。 – 2010-09-23 21:56:28

+0

准确。如果'close'分类的DIV是一个后代,那么如果你点击它,**会消失**(与滑块内容一起)!!如果它不是后代,那么'close()'不起作用。试试吧==> http://jsfiddle.net/tSTcL/ ---- PS:我没有得到通知你评论回来,除非你用'@ Peter'开始你的消息。只有作者和编辑的帖子才能获得自动通知。 – 2010-09-23 22:07:54