給出一個doucment像這樣:jQuery的。對適用於所有中間節點
<body><div class="a"><div class="b"><div class="c"></div></div></div></body>
(在本例中一切都是一個div - 但他們可以是任何東西)
我想運行一個單擊事件處理程序,它被點擊和所有父母的
也就是說,如果你點擊.c
我期望的事件觸發的.c
然後.b
然後.a
如果你點擊0 DIV然後該事件應該引發.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案例 - 因此我對某種內置方法有着雄心勃勃的渴望。
我想要一個電話來.on來處理所有這些事件 – DJL
嗨DJL,我剛剛編輯我的答案。 – LuudJacobs
好吧,所以現在這隻適用於div,但我實際上需要它適用於任何類型的元素。將此更改爲*會導致大文件大幅減速? (有問題的文件可能很大)。 因此,爲什麼我將它應用於身體(我的原始問題中的錯誤會被瞬間糾正) – DJL