Javascript 如何使用jQuery来确定某个特定元素中是否触发了单击事件?

Javascript 如何使用jQuery来确定某个特定元素中是否触发了单击事件?,javascript,jquery,html,events,Javascript,Jquery,Html,Events,我使用下面的代码来设置块的动画。在我的代码中,div\u animate()基本上隐藏了带有指定选择器的,如果它当前可见 $(document).click(function(event){ div_animate("#container"); }); 我需要确定用户是否单击了#container的子级,如果是,则返回false--据我所知,这方面的代码如下所示: $(document).click(function(event){ if ( /* the event's ta

我使用下面的代码来设置块的动画。在我的代码中,
div\u animate()
基本上隐藏了带有指定选择器的
,如果它当前可见

$(document).click(function(event){
    div_animate("#container");
});
我需要确定用户是否单击了
#container
的子级,如果是,则返回false--据我所知,这方面的代码如下所示:

$(document).click(function(event){
    if ( /* the event's target has a parent of #container */ ) {
        return false;
    } else {
        div_animate("#container");
    }
});
$(document).click(function(event){
    var c = $("#container")[0];
    if (event.target == c || $.contains(c, event.target)) {
        return false;
    } else {
        div_animate("#container");
    }
});
$("#container").click(function(e) {
  e.stopPropagation();
});
$(document).click(function() {
  div_animate("#container");
});

有什么想法吗?

最简单的方法是:

if ($(event.target).is('#container *, #container')) // edited - thanks @gnarf
  // is a child
else
  // is not a child
您可以做出不同的选择来检测它是否是目标(或非目标)容器的子容器;那只是一个。另一种选择:

if ($(event.target).closest('#container').length)

如果单击源于或位于
#容器
,则可以阻止该操作,如下所示:

$(document).click(function(event){
    if ( /* the event's target has a parent of #container */ ) {
        return false;
    } else {
        div_animate("#container");
    }
});
$(document).click(function(event){
    var c = $("#container")[0];
    if (event.target == c || $.contains(c, event.target)) {
        return false;
    } else {
        div_animate("#container");
    }
});
$("#container").click(function(e) {
  e.stopPropagation();
});
$(document).click(function() {
  div_animate("#container");
});
第一个检查是它是否来自
#container
本身,第二个检查是它是否来自子容器,即
#container
。另一种更简单的方法是,当单击
#container
时,只需防止气泡上升到
文档
,如下所示:

$(document).click(function(event){
    if ( /* the event's target has a parent of #container */ ) {
        return false;
    } else {
        div_animate("#container");
    }
});
$(document).click(function(event){
    var c = $("#container")[0];
    if (event.target == c || $.contains(c, event.target)) {
        return false;
    } else {
        div_animate("#container");
    }
});
$("#container").click(function(e) {
  e.stopPropagation();
});
$(document).click(function() {
  div_animate("#container");
});

但它无法单独找到
#容器
。。。也许
$(event.target).最近的('#container').length
是('#container,#container*')
这正是我想要的。谢谢你的快速回答@gnarf啊,是的,你是对的-我已经添加了“最接近的”选项,但我会修复第一个。@Jazzerus确保你注意到我根据gnarf的评论所做的轻微编辑,并注意Nick的回答,当
$(另一个选择器)时,这将无法正常工作。触发器(事件)
在相关选择器内被激活。示例:
$(某物)。单击(函数(){$(另一个选择器)。触发器(事件);})完成此操作时
$(文档)。单击(函数(e){if(e.target).is(something){})
总是将另一个选择器作为事件的目标,而不是
某个东西作为事件的目标。这是我惩罚你没有缓存“#container”查找的黄金机会,但我打赌在我完成输入此注释时你会编辑它:-)不,我的意思是缓存在处理函数或其他东西的闭包中,虽然我只是在开玩笑。@Pointy-啊,是的,你可以,尽管你假设在这种情况下它不会改变或移动;)这和我给你的问题是同一个问题吗?@patrick这和我上一个问题不一样,但它是相关的——当我添加上一个问题的解决方案时,这个问题出现了。虽然你的链接与我最初的问题相似,但我觉得它没有什么用处。