2014-08-28 108 views
2

非常簡單,我一直在搜索最高和最低的所有jQuery事件的全面列表,這些事件不會冒泡,但我一直無法找到它。哪些jQuery事件不會冒泡?

例如我尋找像image.loadXMLHttpRequest.error事件等

+4

由於jQuery是JavaScript,所以與jQuery無關。 – j08691 2014-08-28 19:47:26

+1

http://www.w3.org/TR/DOM-Level-3-Events/#event-types-list – 2014-08-28 19:49:01

+0

@ j08691 - 這取決於,jQuery向通常不會冒泡的事件添加冒泡。 – adeneo 2014-08-28 19:51:19

回答

5

The docs for jQuery's on() method says this(在 「附加註釋」);

focusblur事件由W3C不氣泡規定,但jQuery的定義跨瀏覽器focusinfocusout事件做泡沫。當focusblur用於附加委派的事件處理程序時,jQuery映射名稱並分別將其作爲focusinfocusout傳遞。爲了保持一致性和清晰度,請使用冒泡事件類型名稱。

在所有的瀏覽器中,loadscroll,和error事件(例如,一個<img>元件上)不冒泡。在Internet Explorer 8及更低版本中,pastereset事件不會冒泡。此類事件不支持與委派一起使用,但可以在事件處理程序直接附加到生成事件的元素時使用它們。

我已經粗體顯示這是最重要的句子。

早些時候在這個文檔中(在「直接和委託的事件」,它也這樣說:

在Internet Explorer 8和更低,一些事件,如changesubmit並不是原本泡沫,但jQuery的補丁這些冒泡,創建一致的跨瀏覽器的行爲。

你還會發現,mouseleavemouseenter不冒泡(使用該mouseovermouseout事件)。這在他們的RESP討論有效的文檔。

我不會開始全面地調用上面的列表,但它是一個開始。我不確定XMLHttpRequest是如何進入你的問題的;它不是DOM的一部分,因此沒有任何祖先,因此不能像正常的DOM事件那樣真正冒泡

+0

我欣賞給出的列表,但我需要存儲一個實際的事件名稱數組,不會出於事件跟蹤目的谷歌分析。具體來說,我需要知道哪些事件必須直接附加到對象上,以及哪些事件可以被授權。在XMLHttpRequest的上下文中,這個用例就是跟蹤某些AJAX調用的'load'事件 – wvandaal 2014-08-28 20:02:11

+1

@wvandaal:爲什麼不總是附加到對象上?我仍然不明白XMLHttpRequest的用例;在訂閱onreadystatechange之外,唯一可以檢測XMLHttpRequest完成(AFAIK)的方法是等待DOMSubtreeModified事件,並假定這是因爲AJAX調用?我推薦其他方法,因爲我不確定你會得到一個完整的列表。如果您考慮非標準,草稿,瀏覽器擴展,則有數百個事件*,然後*您有一些事件在其他事件中冒泡,而在其他事件中則不會。這是一件很難實現的事:) – Matt 2014-08-28 20:07:26

1

根據DOM Level 3 Events spec

  • 事件氣泡:

    beforeinputclickcompositionstartcompositionupdatecompositionenddblclickfocusinfocusoutinput,​​,keyupmousedownmousemovemouseoutmouseover,mouseupselectwheel

  • 事件不冒泡:

    abortblurerrorfocusloadmouseentermouseleaveresizescroll(*)unload

注DOM級別3事件不定義所​​有事件,其中一些事件由HTML5規範定義。

該規範不太清晰,因爲如果事件在非規範部分中冒泡並定義了一些事件,並不總是這麼說。在其中的一個,它說的是drag-and-drop events泡沫:

dragstartdragdragenterdragexitdragleavedragoverdropdragend


(*)當在Document元件,scroll事件類型必須泡到defaultView對象調度。