【发布时间】:2011-11-01 00:53:03
【问题描述】:
我的图片和内容上有“背板”:http://syndex.me 所以基本上,你点击一张图片,它会在点击的内容上方覆盖一个信息面板。
我想做两件事:
- 点击网站背景可以淡出当前打开的信息面板
- 能够在信息面板内点击标签、链接或社交图标,而不会触发它的父功能,这又太淡出了。
我不能对被父点击取代的子点击使用 stopPropagation,因为我需要由 .live() (see documentation) 处理点击事件这是因为帖子是动态加载的。
我不能只说: $("#Background").click(function(){//淡出信息板} 因为整个帖子包装都涵盖了这一点,我不能把事件放在帽子上,因为那样我就更深陷于父母接管儿童事件的困境中:-)
到目前为止,我至少能够只打开一个信息板(即,我单击一个图像,然后单击另一个图像,它将关闭已经打开的图像,并打开当前的图像。所以这部分都很好:
$('.theContent:not(.clicked)').live("click", function () {
$(this).children('.postInfo').fadeIn(400);
$(".clicked").each(function() {
$(this).find('.postInfo').fadeOut(400);
$(this).removeClass('clicked');
});
$(this).addClass("clicked");
});
$('.clicked').live("click", function () {
$(".clicked").each(function() {
$(this).find('.postInfo').fadeOut(400);
$(this).removeClass('clicked');
});
});
重新 .live()、.delegate() 和 .stopPropogation():
由于 .live() 方法在事件传播到文档顶部后处理事件,因此无法停止实时事件的传播。同样,由 .delegate() 处理的事件将传播到它们被委托的元素;在调用委托的事件处理程序时,绑定在 DOM 树中它下面的任何元素上的事件处理程序将已经执行。因此,这些处理程序可能会阻止委托处理程序通过调用 event.stopPropagation() 或返回 false 来触发。
【问题讨论】:
-
我不确定它是否有效,但您是否在
live()事件处理程序上尝试过return false;? -
不,只是现在做了,没有任何区别。不过,那将是严肃的禅宗!
-
在“普通”JavaScript 中,这就是你应该做的 :) 似乎没有办法阻止该事件。你有没有想过设置一个全局变量并在你的动画处理程序上检查它?
-
我以前从未这样做过,同时我将研究全局变量。我确信这是一个常见的问题。最近很多用户界面都有这种点击外部点击内部方法。
-
嗯....知道为什么会这样吗? jsfiddle.net/Quincy/PbxBH/2