2

簡單地說:IE 8 - Click事件衝入<html>元素?

jQuery("html").click(function(e){ 
    if (e.target == this){ 
     alert("this really shouldn't happen"); 
    } 
}); 

在IE8中,警報被觸發頁面上的許多地方,包括嵌套在其他元素中的元素!有什麼會導致這種奇怪的行爲?

這是一個重大的問題,因爲這將導致click事件繞過綁定到文檔中的元素所有處理程序,直接對文件本身,而不是觸發(直接,未授權)。

編輯

我也懷疑不對勁了使用開發工具時,IE8的...當我將「通過單擊選擇元素」使用的工具和懸停在有問題的地方,它會「框「整個文檔,就好像在那個位置沒有後代(是的,我點擊了Refresh來確保Dev ​​Tools有一個最新的文檔模式)。

EDIT 2

對不起,我忘了提......這些問題點之一是「DL」元素......也許IE8被這些迷惑,只是手離開事件的文件?

+0

我很清楚什麼事件冒泡的......然而,e.target表示被點擊的初始元素,而不是綁定到處理元素(請參見http ://api.jquery.com/event.target/)。如果e.target和「this」相等,則意味着處理程序是通過點擊綁定元素觸發的,而不是後代。 – 2012-02-27 20:24:56

+0

有趣。越野車。如果使用'e.stopImmediatePropagation()',會發生同樣的事情嗎?不是說你應該需要它,只是想知道這是否是一個解決方案。 – 2012-02-27 20:25:21

回答

1

這是由於事件「冒泡」和事件「捕獲」的差異。

本頁解釋得好:http://www.quirksmode.org/js/events_order.html

+0

我非常懷疑這是它,因爲頁面上的其他地方表現正常,jQuery(據說)正常化冒泡/捕獲。但是,感謝您的鏈接。 – 2012-02-27 20:26:11

+0

@Matt:jQuery在這裏做的不多。它只在冒泡階段綁定事件處理程序。 IE根本不支持捕獲。這就是說,我不認爲這與你的問題有關。 – 2012-02-27 21:11:42