jQuery选择器:不是这个div,也不是那个div

jQuery选择器:不是这个div,也不是那个div,jquery,css,click,Jquery,Css,Click,我正在尝试创建一个jQuery click函数,当您单击除该div之外的任何内容时,该函数将关闭该div。我的问题是,该div中有一个搜索字段和另一个按钮,如果您单击它们,则需要保持打开状态 我目前的职能是: $("*:not(#header)").click(function() { $('#header').slideUp({ duration: 550, easing: 'easeOutExpo' }); }); 我还想说“而且不是”#c

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

我目前的职能是:

$("*:not(#header)").click(function() {
    $('#header').slideUp({
        duration: 550, 
        easing: 'easeOutExpo'
    });
});
我还想说“而且不是”#categoryMore“也不是”#headerSearch“,但我一直使用的语法不起作用

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

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

您可能想使用jQuery插件:

使用jQuery外部事件,您可以 绑定到将发生的事件 仅当特定的 “始发”事件发生在外部 有问题的因素。例如 你可以点击外面,双击 外面,鼠标移到外面,集中注意力 外部(以及超过十个默认值) “外部”事件)。另外,如果是外部 默认情况下未提供事件, 你可以很容易地定义你自己的

您可能需要使用jQuery插件:

使用jQuery外部事件,您可以 绑定到将发生的事件 仅当特定的 “始发”事件发生在外部 有问题的因素。例如 你可以点击外面,双击 外面,鼠标移到外面,集中注意力 外部(以及超过十个默认值) “外部”事件)。另外,如果是外部 默认情况下未提供事件, 你可以很容易地定义你自己的


编辑:

下面是一个可以测试的示例

我在示例中使用了
slideToggle()
,因此您可以更轻松地多次测试它


在关闭
#标题的
文档上放置一个处理程序

然后在
#header
上放置一个处理程序,该处理程序执行
事件.stopPropagation()
,以防止在文档内部单击时事件冒泡到文档

$(document).click(function() {
    $('#header:visible').slideUp({
        duration: 550, 
        easing: 'easeOutExpo'
    });
});

$('#header').click(function( event ) {
    event.stopPropagation();
});
请注意,如果页面上的任何其他元素具有使用
event.stopPropagation()或
返回false的单击处理程序
,事件不会出现在文档中,并且您的
#标题
不会关闭


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

编辑:

下面是一个可以测试的示例

我在示例中使用了
slideToggle()
,因此您可以更轻松地多次测试它


在关闭
#标题的
文档上放置一个处理程序

然后在
#header
上放置一个处理程序,该处理程序执行
事件.stopPropagation()
,以防止在文档内部单击时事件冒泡到文档

$(document).click(function() {
    $('#header:visible').slideUp({
        duration: 550, 
        easing: 'easeOutExpo'
    });
});

$('#header').click(function( event ) {
    event.stopPropagation();
});
请注意,如果页面上的任何其他元素具有使用
event.stopPropagation()或
返回false的单击处理程序
,事件不会出现在文档中,并且您的
#标题
不会关闭

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

我认为您可以使用它,它可能非常简单:

$(document).not('#header, #categoryMore, #headerSearch').click(function() {
    $('#header').slideToggle({
        duration: 550, 
        easing: 'easeOutExpo'
    });
});
这允许您单击
#标题
之外的任何位置,操作将被触发。您不必担心其他
。单击()
事件及其传播(至少据我所知)。。。它将不会选择
#标题、#类别名称、
#标题搜索

无论何时单击页眉外部,都可以使用上下滑动页眉及其内容。如果您只想隐藏它,那么只需像现在一样使用
.slideUp()

希望对您有所帮助。

我想您可以使用,它可能很简单:

$(document).not('#header, #categoryMore, #headerSearch').click(function() {
    $('#header').slideToggle({
        duration: 550, 
        easing: 'easeOutExpo'
    });
});
这允许您单击
#标题
之外的任何位置,操作将被触发。您不必担心其他
。单击()
事件及其传播(至少据我所知)。。。它将不会选择
#标题、#类别名称、
#标题搜索

无论何时单击页眉外部,都可以使用上下滑动页眉及其内容。如果您只想隐藏它,那么只需像现在一样使用
.slideUp()


希望这能有所帮助。

我相信
patrick dw
在这里的思路是正确的,但是html标记很高兴能在答案上得到具体的说明。如果我理解正确,您在标题中有一些元素,在标题隐藏时您不想隐藏这些元素。是这样吗?j-man86-不管你最终做什么,你都不想通过执行
$(“*:not(#header)”)
为页面上的几乎每个元素添加一个处理程序。这是非常低效的,真的不应该使用。也许这就是我的解决方案给你带来的麻烦。你需要去掉这个选择器。我相信patrick dw
在这里是正确的,但是html标记会很好地显示在答案上。如果我理解正确,你在标题中有一些元素,当标题被隐藏时,你不想隐藏这些元素。是这样吗?j-man86-不管你最终做什么,你都不想通过执行
$(“*:not(#header)”)
为页面上的几乎每个元素添加一个处理程序。这是非常低效的,真的不应该使用。也许这就是我的解决方案给你带来的麻烦。你需要去掉那个选择器。@j-man86-这里有一个例子。(示例使用了
slideToggle()
)什么不起作用?你是说
#标题没有滑动吗?或者在
#标题
中单击使其滑动?sry:)。。。要指定,在#header div内单击仍会使其滑动。@j-man86-不应该这样做。确保如上所述将
事件
参数添加到
#header
的处理函数中。还要确保删除将单击事件添加到页面上所有其他元素的代码<代码>$(“*:非(#标题)”)
@j-man86-以下是一个示例。(例如: