给定这样的文件:
<body><div class="a"><div class="b"><div class="c"></div></div></div></body>
(在示例中,一切都是 div - 但它们可以是任何东西)
我想为单击的 div 及其所有父项运行单击事件处理程序
即,如果您单击.c
我希望事件会触发.c
然后
如果您单击.b
然后事件应该触发然后.a
.b
.b
.a
注意在这种情况下,我使用$('body').on('click', function(event){...})
using$('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 案例——因此我雄心勃勃地渴望某种内置方法。