非常簡單,我一直在搜索最高和最低的所有jQuery事件的全面列表,這些事件不會冒泡,但我一直無法找到它。哪些jQuery事件不會冒泡?
例如我尋找像image.load
,XMLHttpRequest.error
事件等
非常簡單,我一直在搜索最高和最低的所有jQuery事件的全面列表,這些事件不會冒泡,但我一直無法找到它。哪些jQuery事件不會冒泡?
例如我尋找像image.load
,XMLHttpRequest.error
事件等
The docs for jQuery's on()
method says this(在 「附加註釋」);
的
focus
和blur
事件由W3C不氣泡規定,但jQuery的定義跨瀏覽器focusin
和focusout
事件做泡沫。當focus
和blur
用於附加委派的事件處理程序時,jQuery映射名稱並分別將其作爲focusin
和focusout
傳遞。爲了保持一致性和清晰度,請使用冒泡事件類型名稱。在所有的瀏覽器中,
load
,scroll
,和error
事件(例如,一個<img>
元件上)不冒泡。在Internet Explorer 8及更低版本中,paste
和reset
事件不會冒泡。此類事件不支持與委派一起使用,但可以在事件處理程序直接附加到生成事件的元素時使用它們。
我已經粗體顯示這是最重要的句子。
早些時候在這個文檔中(在「直接和委託的事件」,它也這樣說:
在Internet Explorer 8和更低,一些事件,如
change
和submit
並不是原本泡沫,但jQuery的補丁這些冒泡,創建一致的跨瀏覽器的行爲。
你還會發現,mouseleave
和mouseenter
不冒泡(使用該mouseover
和mouseout
事件)。這在他們的RESP討論有效的文檔。
我不會開始全面地調用上面的列表,但它是一個開始。我不確定XMLHttpRequest是如何進入你的問題的;它不是DOM的一部分,因此沒有任何祖先,因此不能像正常的DOM事件那樣真正冒泡。
我欣賞給出的列表,但我需要存儲一個實際的事件名稱數組,不會出於事件跟蹤目的谷歌分析。具體來說,我需要知道哪些事件必須直接附加到對象上,以及哪些事件可以被授權。在XMLHttpRequest的上下文中,這個用例就是跟蹤某些AJAX調用的'load'事件 – wvandaal 2014-08-28 20:02:11
@wvandaal:爲什麼不總是附加到對象上?我仍然不明白XMLHttpRequest的用例;在訂閱onreadystatechange之外,唯一可以檢測XMLHttpRequest完成(AFAIK)的方法是等待DOMSubtreeModified事件,並假定這是因爲AJAX調用?我推薦其他方法,因爲我不確定你會得到一個完整的列表。如果您考慮非標準,草稿,瀏覽器擴展,則有數百個事件*,然後*您有一些事件在其他事件中冒泡,而在其他事件中則不會。這是一件很難實現的事:) – Matt 2014-08-28 20:07:26
事件氣泡:
beforeinput
,click
,compositionstart
,compositionupdate
,compositionend
,dblclick
,focusin
,focusout
,input
,,keyup
,mousedown
,mousemove
,mouseout
,mouseover
,mouseup
, select
,wheel
。
事件不冒泡:
abort
,blur
,error
,focus
,load
,mouseenter
,mouseleave
,resize
,scroll
(*),unload
注DOM級別3事件不定義所有事件,其中一些事件由HTML5規範定義。
該規範不太清晰,因爲如果事件在非規範部分中冒泡並定義了一些事件,並不總是這麼說。在其中的一個,它說的是drag-and-drop events泡沫:
dragstart
,drag
,dragenter
,dragexit
,dragleave
,dragover
,drop
,dragend
。
(*)當在Document
元件,scroll
事件類型必須泡到defaultView
對象調度。
由於jQuery是JavaScript,所以與jQuery無關。 – j08691 2014-08-28 19:47:26
http://www.w3.org/TR/DOM-Level-3-Events/#event-types-list – 2014-08-28 19:49:01
@ j08691 - 這取決於,jQuery向通常不會冒泡的事件添加冒泡。 – adeneo 2014-08-28 19:51:19