This chapter describes the DOM Event Model. The 事件 interface itself is described, as well as the interfaces for event registration on nodes in the DOM, and event listeners , and several longer examples that show how the various event interfaces relate to one another.
There is an excellent diagram that clearly explains the three phases of event flow through the DOM in the DOM 3 级事件草案 .
另请参阅 Example 5: Event Propagation in the Examples chapter for a more detailed example of how events move through the DOM.
There are 3 ways to register event handlers for a DOM element.
EventTarget.addEventListener
// Assuming myButton is a button element
myButton.addEventListener('click', greet, false)
function greet(event){
// print and have a look at the event object
// always print arguments in case of overlooking any other arguments
console.log('greet:', arguments)
alert('hello world')
}
This is the method you should use in modern web pages.
注意:
Internet Explorer 6–8 didn't support this method, offering a similar
EventTarget.attachEvent
API instead. For cross-browser compatibility, use one of the many JavaScript libraries available.
More details can be found on the
EventTarget.addEventListener
reference page.
<button onclick="alert('Hello world!')">
The JavaScript code in the attribute is passed the Event object via the
event
参数。
The return value is treated in a special way, described in the HTML specification
.
警告: This method should be avoided! It inflates the markup, and makes it less readable. Concerns of content/structure and behavior are not well-separated, making a bug harder to find.
// Assuming myButton is a button element
myButton.onclick = function(event){alert('Hello world')}
The function can be defined to take an
event
参数。
The return value is treated in a special way, described in the HTML specification
.
The problem with this method is that only one handler can be set per element and per event.
Event handlers may be attached to various objects (including DOM elements, document, the
window
object, etc.). When an event occurs, an event object is created and passed sequentially to the event listeners.
事件
interface is accessible from within the handler function, via the event object passed as the first argument. The following simple example shows how an event object is passed to the event handler function, and can be used from within one such function.
function print(evt) {
// the evt parameter is automatically assigned the event object
// take care of the differences between console.log & alert
console.log('print:', evt)
alert(evt)
}
// any function should have an appropriate name, that's what called semantic
table_el.onclick = print
AbortController
AbortSignal
AbstractRange
Attr
ByteString
CDATASection
CharacterData
ChildNode
CSSPrimitiveValue
CSSValue
CSSValueList
注释
CustomEvent
Document
DocumentFragment
DocumentType
DOMConfiguration
DOMError
DOMErrorHandler
DOMException
DOMImplementation
DOMImplementationList
DOMImplementationRegistry
DOMImplementationSource
DOMLocator
DOMObject
DOMParser
DOMPoint
DOMPointInit
DOMPointReadOnly
DOMRect
DOMString
DOMTimeStamp
DOMTokenList
DOMUserData
元素
ElementTraversal
Entity
EntityReference
事件
EventTarget
HTMLCollection
MutationObserver
节点
NodeFilter
NodeIterator
NodeList
NonDocumentTypeChildNode
ProcessingInstruction
PromiseResolver
范围
StaticRange
文本
TextDecoder
TextEncoder
TimeRanges
TreeWalker
TypeInfo
UserDataHandler
USVString
XMLDocument