有没有办法找出用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
。
$(':not(#box)').bind('click', function() {
// this should match everything except your box
});
请*不*要做到这一点,它会结合事件处理程序的*吨*和没有解决问题(任何元素*里面*'#box'仍然会关闭它 – 2010-10-10 21:13:17
想过做这个,但像尼克说这不正是我会需要感谢您的建议 – Johnny 2010-10-10 21:15:56
@Johnny - !一定要认识到这也是巨大的低效率,如果你的DOM中有41,000个元素,这将绑定40,999个事件处理程序......这不是解决任何问题**。亚历克,我不确定你是否完全想过你的代码在做什么,我会重新考虑混合全局选择器(在这里暗示为'*:not()')和绑定的任何方法。 – 2010-10-10 21:19:19
我确定我最终可以弄明白,但这对你来说可能是一件容易的事。我如何使用切换而不是点击来实现这个#button? – Johnny 2010-10-10 21:56:00
@Johnny - 我想你还是想'。点击()'这里有一个'.toggle()'的元素(如显示隐藏,隐藏如果显示),像这样:http://jsfiddle.net/ nick_craver/zDhv5/10/ – 2010-10-10 22:05:57
我在看到您的评论之前就明白了这一点,您如何看待此代码与您的反对? $('#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