考虑到这样的结果:
<body><div class="a"><div class="b"><div class="c"></div></div></div></body>
(在示例中,一切都是div - 但它们可以是任何东西)
我想为点击的div及其所有父
运行一个click事件处理程序即。如果您点击.c
,我希望.c
然后.b
然后.a
触发该事件
如果您点击.b
,那么该事件应该触发.b
然后.a
N.B。在这个例子中我使用$('body').on('click', function(event){...})
由于与问题无关的原因,使用$('div').click(function(event){...})
在我的实例中不是一个实用选项。
我尝试从事件处理程序中运行dom树,但是事件对象包含错误的偏移量。
所以我的问题是 - 是否有一种内置方法可以使用上述模式调用事件处理程序。
或者失败 - 有一种内置的方法可以在给定“from”和“to”元素的情况下操纵偏移事件对象。
即AdjustOffsets(event, $target, $target.parent())
或者失败 - 为了手动执行这种操作,我需要什么逻辑。
在最后一种情况下,我有这段代码,但它不起作用。
if ($target.css('position') != 'static' && $target.css('position') != '')
{
event.clientX += $target.css('left');
event.clientY += $target.css('top');
}
event.clientX += $target.css('borderLeftWidth');
event.clientY += $target.css('borderTopWidth');
event.clientX += $target.css('marginLeft');
event.clientY += $target.css('marginTop');
$target = $target.parent();
event.clientX += $target.css('paddingLeft');
event.clientY += $target.css('paddingTop');
这会失败,因为css属性包含单位。
单位很容易剥离,但我相信有些浏览器会返回原始单位(例如em
或pt
),而clientX属性必须是像素 - 因此转换是必要的。
这也是我最好的猜测,可能会错过一千个不起眼的css3案例 - 因此我对某种内置方法抱有雄心勃勃的渴望。
答案 0 :(得分:0)
您可以在事件处理程序中尝试递归触发器,如下所示:
$(document).on('click', '.someClass', function(e){
// .. do stuff
$(this).parent('.someClass').trigger('click');
});
答案 1 :(得分:0)