jQuery选择器:不是这个div而不是那个div

时间:2010-08-10 13:06:39

标签: jquery css click

我正在尝试创建一个jQuery单击函数,当您单击该div之外的任何内容时将关闭div。我的问题是,如果你点击它们,那里面有一个搜索字段和另一个按钮需要保持打开状态。

我目前的职能是:

$("*:not(#header)").click(function() {
    $('#header').slideUp({
        duration: 550, 
        easing: 'easeOutExpo'
    });
});

我还想说“并且不是'#categoryMore'并且不是'#headerSearch'”但是我一直在使用的语法没有用。

$("*:not(#header, #categoryMore, #headerSearch)")

$("*:not(#header), *:not(#categoryMore), *:not(#headerSearch)")

有什么想法吗?非常感谢你的帮助!

3 个答案:

答案 0 :(得分:3)

编辑:

以下是您可以测试的示例。 http://jsfiddle.net/yvFcz/

我使用slideToggle()作为示例,因此您可以更轻松地多次测试它。


在关闭document的{​​{1}}上设置处理程序。

然后在执行#header的{​​{1}}上放置一个处理程序,以防止事件在您单击文档时冒泡到文档中。

#header

请注意,如果页面上的任何其他元素都有一个使用event.stopPropagation()$(document).click(function() { $('#header:visible').slideUp({ duration: 550, easing: 'easeOutExpo' }); }); $('#header').click(function( event ) { event.stopPropagation(); }); 的点击处理程序,则该事件不会冒泡到文档,而您的event.stopPropagation()赢了“关闭。

在这种情况下,您需要直接在该处理程序中处理它。

答案 1 :(得分:1)

您可能想要使用jQuery插件jQuery outside events

  

使用jQuery外部事件即可   绑定到将要发生的事件   仅在具体时触发   “发源”事件发生在外面   有问题的元素。例如,   你可以点击外面,双击   外面,鼠标外面,焦点   外面(超过十个默认值   “外部”事件)。另外,如果是外面的话   默认情况下未提供事件,   你可以轻松定义自己的。

答案 2 :(得分:1)

我认为您可以使用jQuery not(),它可能就像这样简单:

$(document).not('#header, #categoryMore, #headerSearch').click(function() {
    $('#header').slideToggle({
        duration: 550, 
        easing: 'easeOutExpo'
    });
});

这允许您点击#header之外的任何位置,系统会触发操作。您不必担心其他.click()事件及其传播(至少不是我所知)......它不会选择#header, #categoryMore,#headerSearch

只要您点击标题及其内容,就可以使用jQuery slideToggle()向上和向下滑动标题及其内容。如果您只想隐藏它,那么就像现在一样使用.slideUp():)

希望有所帮助。