我在我的图片和内容上有一个'Back Board',链接如下:http://syndex.me。基本上,你点击一张图片,它将覆盖在点击的内容上方展示一个信息面板。
我想要做两件事情:
我不能只是写像这样的代码: $("#Background").click(function(){//淡出信息面板} 因为它被整个帖子包装器所覆盖,我无法在上面放置事件,否则我就更陷入父级接管子级事件的困境了:-)
到目前为止,我至少能够只打开一个信息面板(比如我点击一个图片,然后又点击另一个图片,它会关闭已经打开的那个,并打开当前的那个)。所以这部分还不错:
我想要做两件事情:
- 点击网站背景淡化当前打开的信息面板
- 能够在信息面板中点击标签、链接或社交图标而不触发其父函数,即面板再次消失。
我不能只是写像这样的代码: $("#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() 和 .stopPropagation() 方法:
.live() 方法处理事件时,事件已经传播到文档的顶部,因此无法停止 live 事件的传播。同样,由 .delegate() 处理的事件将传播到委托它们的元素;DOM 树中在其下方绑定的事件处理程序将在调用委托的事件处理程序时已经执行。因此,这些处理程序可能通过调用 event.stopPropagation() 或返回 false 来防止委托处理程序触发。
live()
事件处理程序中使用return false;
了吗? - Andre