有没有办法找出用jquery点击了什么元素?

问题描述:

我正在制作一个按钮,点击时会显示一个HTML框。如果在同一个盒子内单击其他任何内容,我想隐藏该框。任何建议?有没有办法找出用jquery点击了什么元素?

您可以使用event propagation (bubbling),你的优势在这里,例如:

$("#button").click(function(e) { 
    //show #box 
}); 
$("#button, #box").click(function(e) { 
    e.stopPropagation(); 
}); 
$(document).click(function() { 
    $("#box").hide(); 
}); 

You can test it out here,如果点击按钮或元素(#box在这种情况下)内,该事件不会冒泡。从其他地方它不会冒泡,达到document,隐藏了#box

+0

我确定我最终可以弄明白,但这对你来说可能是一件容易的事。我如何使用切换而不是点击来实现这个#button? – Johnny 2010-10-10 21:56:00

+0

@Johnny - 我想你还是想'。点击()'这里有一个'.toggle()'的元素(如显示隐藏,隐藏如果显示),像这样:http://jsfiddle.net/ nick_craver/zDhv5/10/ – 2010-10-10 22:05:57

+0

我在看到您的评论之前就明白了这一点,您如何看待此代码与您的反对? $('#button')。toggle(function(){ \t //显示方框 },function(){ \t //隐藏方框 }); $( “#箱”)点击(函数(){ \t e.stopPropagation();} )。 ('#box')。(':visible')){ $(document).click(function(){ \t $(“#button”)。trigger('click') ; \t} }); – Johnny 2010-10-10 22:16:05

$(':not(#box)').bind('click', function() { 
    // this should match everything except your box 
});
+1

请*不*要做到这一点,它会结合事件处理程序的*吨*和没有解决问题(任何元素*里面*'#box'仍然会关闭它 – 2010-10-10 21:13:17

+0

想过做这个,但像尼克说这不正是我会需要感谢您的建议 – Johnny 2010-10-10 21:15:56

+2

@Johnny - !一定要认识到这也是巨大的低效率,如果你的DOM中有41,000个元素,这将绑定40,999个事件处理程序......这不是解决任何问题**。亚历克,我不确定你是否完全想过你的代码在做什么,我会重新考虑混合全局选择器(在这里暗示为'*:not()')和绑定的任何方法。 – 2010-10-10 21:19:19