This document is also available in these non-normative formats: XML file, plain text, PostScript file, PDF file, single HTML file, and ZIP file.
Copyright ©2003 W3C® (MIT, ERCIM, Keio), All Rights Reserved. W3C liability, trademark, document use and software licensing rules apply.
This specification defines the Document Object Model Events Level 3, a generic platform- and language-neutral event system which allows registration of event handlers, describes event flow through a tree structure, and provides basic contextual information for each event. The Document Object Model Events Level 3 builds on the Document Object Model Events Level 2 [DOM Level 2 Events].
This section describes the status of this document at the time of its publication. Other documents may supersede this document. A list of current W3C publications and the latest revision of this technical report can be found in the W3C technical reports index at http://www.w3.org/TR/.
This document contains the Document Object Model Level 3 Events specification and is a W3C Working Group Note. It is based on the feedback during the Last Call period. The W3C DOM Working Group participants do not expect to provide interoperable implementations of this module. Implementation feedbacks are however welcome and have to be sent to the public mailing list www-dom@w3.org (public archive). Other W3C Working Groups may continue the work and provide implementations of this document.
Individuals or organizations are also invited to send a message to the public mailing list if they intend to produce an implementation of this module.
Publication as a Working Group Note does not imply endorsement by the W3C Membership. This is a draft document and may be updated, replaced or obsoleted by other documents at any time.
This document has been produced as part of the W3C DOM Activity. The authors of this document are the DOM Working Group members.
Patent disclosures relevant to this specification may be found on the DOM Working Group's patent disclosure page.
Copyright © 2003 World Wide Web Consortium, (Massachusetts Institute of Technology, European Research Consortium for Informatics and Mathematics, Keio University). All Rights Reserved.
This document is published under the W3C® Document Copyright Notice and License. The bindings within this document are published under the W3C® Software Copyright Notice and License. The software license requires "Notice of any changes or modifications to the W3C files, including the date changes were made." Consequently, modified versions of the DOM bindings must document that they do not conform to the W3C standard; in the case of the IDL definitions, the pragma prefix can no longer be 'w3c.org'; in the case of the Java language binding, the package names can no longer be in the 'org.w3c' package.
Note: This section is a copy of the W3C® Document Notice and License and could be found at http://www.w3.org/Consortium/Legal/2002/copyright-documents-20021231.
Copyright © 2003 World Wide Web Consortium, (Massachusetts Institute of Technology, European Research Consortium for Informatics and Mathematics, Keio University). All Rights Reserved.
http://www.w3.org/Consortium/Legal/2002/copyright-documents-20021231
Public documents on the W3C site are provided by the copyright holders under the following license. By using and/or copying this document, or the W3C document from which this statement is linked, you (the licensee) agree that you have read, understood, and will comply with the following terms and conditions:
Permission to copy, and distribute the contents of this document, or the W3C document from which this statement is linked, in any medium for any purpose and without fee or royalty is hereby granted, provided that you include the following on ALL copies of the document, or portions thereof, that you use:
When space permits, inclusion of the full text of this NOTICE should be provided. We request that authorship attribution be provided in any software, documents, or other items or products that you create pursuant to the implementation of the contents of this document, or any portion thereof.
No right to create modifications or derivatives of W3C documents is granted pursuant to this license. However, if additional requirements (documented in the Copyright FAQ) are satisfied, the right to create modifications or derivatives is sometimes granted by the W3C to individuals complying with those requirements.
THIS DOCUMENT IS PROVIDED "AS IS," AND COPYRIGHT HOLDERS MAKE NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, NON-INFRINGEMENT, OR TITLE; THAT THE CONTENTS OF THE DOCUMENT ARE SUITABLE FOR ANY PURPOSE; NOR THAT THE IMPLEMENTATION OF SUCH CONTENTS WILL NOT INFRINGE ANY THIRD PARTY PATENTS, COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS.
COPYRIGHT HOLDERS WILL NOT BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF ANY USE OF THE DOCUMENT OR THE PERFORMANCE OR IMPLEMENTATION OF THE CONTENTS THEREOF.
The name and trademarks of copyright holders may NOT be used in advertising or publicity pertaining to this document or its contents without specific, written prior permission. Title to copyright in this document will at all times remain with copyright holders.
Note: This section is a copy of the W3C® Software Copyright Notice and License and could be found at http://www.w3.org/Consortium/Legal/2002/copyright-software-20021231
Copyright © 2003 World Wide Web Consortium, (Massachusetts Institute of Technology, European Research Consortium for Informatics and Mathematics, Keio University). All Rights Reserved.
http://www.w3.org/Consortium/Legal/2002/copyright-software-20021231
This work (and included software, documentation such as READMEs, or other related items) is being provided by the copyright holders under the following license. By obtaining, using and/or copying this work, you (the licensee) agree that you have read, understood, and will comply with the following terms and conditions.
Permission to copy, modify, and distribute this software and its documentation, with or without modification, for any purpose and without fee or royalty is hereby granted, provided that you include the following on ALL copies of the software and documentation or portions thereof, including modifications:
THIS SOFTWARE AND DOCUMENTATION IS PROVIDED "AS IS," AND COPYRIGHT HOLDERS MAKE NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO, WARRANTIES OF MERCHANTABILITY OR FITNESS FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF THE SOFTWARE OR DOCUMENTATION WILL NOT INFRINGE ANY THIRD PARTY PATENTS, COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS.
COPYRIGHT HOLDERS WILL NOT BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF ANY USE OF THE SOFTWARE OR DOCUMENTATION.
The name and trademarks of copyright holders may NOT be used in advertising or publicity pertaining to the software without specific, written prior permission. Title to copyright in this software and any associated documentation will at all times remain with copyright holders.
Note: This section is a copy of the W3C® Short Software Notice and could be found at http://www.w3.org/Consortium/Legal/2002/copyright-software-short-notice-20021231
Copyright © 2003 World Wide Web Consortium, (Massachusetts Institute of Technology, European Research Consortium for Informatics and Mathematics, Keio University). All Rights Reserved.
Copyright © [$date-of-software] World Wide Web Consortium, (Massachusetts Institute of Technology, European Research Consortium for Informatics and Mathematics, Keio University). All Rights Reserved. This work is distributed under the W3C® Software License [1] in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
[1] http://www.w3.org/Consortium/Legal/2002/copyright-software-20021231
DOM Events is designed with two main goals. The first goal is the design of an event system which allows registration of event listeners and describes event flow through a tree structure. Additionally, the specification will provide standard modules of events for user interface control and document mutation notifications, including defined contextual information for each of these event modules.
The second goal of the DOM Events is to provide a common subset of the current event systems used in DOM Level 0 browsers. This is intended to foster interoperability of existing scripts and content. It is not expected that this goal will be met with full backwards compatibility. However, the specification attempts to achieve this when possible.
The following sections of the specification define both the specification for the DOM Event Model and a number of conformant event modules designed for use within the model. The DOM Event Model consists of:
This document specifies an event flow for tree-based structures: DOM event flow. While it is expected that HTML and XML applications will follow this event flow, applications might reuse the interfaces defined in this document for non tree-based structures. In that case, it is the responsibility of such applications to define their event flow and how it relates to the DOM event flow. An example of such use can be found in [DOM Level 3 Load and Save].
An implementation is DOM Level 3 Events conformant if it
supports the Core module defined in [DOM Level 2 Core], the DOM event flow and the interfaces with
their associated semantics defined in Basic interfaces. An implementation
conforms to a DOM Level 3 Events module if it conforms to DOM Level
3 Events and the event types defined in the module. An
implementation conforms to an event type if it conforms to its
associated semantics and DOM interfaces. For example, an
implementation conforms to the DOM Level 3 User Interface Events
module (see User
Interface event types) if it conforms to DOM Level 3 Events
(i.e. implements all the basic interfaces), can generate the event
types {"http://www.w3.org/2001/xml-events",
"DOMActivate"} {"http://www.w3.org/2001/xml-events",
"DOMFocusIn"} {"http://www.w3.org/2001/xml-events",
"DOMFocusOut"} accordingly to their semantics, supports the
UIEvent
interface, and conforms to the DOM Level 2 Core module.
Note: An implementation which does not conform to an
event module can still implement the DOM interfaces associated with
it. The DOM application can then create an event object using the
DocumentEvent.createEvent()
method and dispatch an event type associated with this interface
using the EventTarget.dispatchEvent()
method.
A DOM application may use the hasFeature(feature,
version) method of the DOMImplementation
interface with parameter values "Events" and
"3.0" (respectively) to determine whether or not DOM
Level 3 Events is supported by the implementation. In order to
fully support DOM Level 3 Events, an implementation must also
support the "Core" feature defined in the DOM Level 2 Core
specification [DOM Level 2 Core] and use the DOM event flow. For additional
information about
conformance, please see the DOM Level 3 Core
specification [DOM Level 3 Core]. DOM Level 3 Events is
built on top of DOM Level 2 Events [DOM Level 2 Events], i.e. a DOM
Level 3 Events implementation where hasFeature("Events",
"3.0") returns true must also return
true when the version number is
"2.0", "" or, null.
Each event module describes its own feature string in the event module listing.
The DOM event flow is the process through which the event originates from the DOM Events implementation and is dispatched into a tree. Each event has an event target, a targeted node in the case of the DOM Event flow, toward which the event is dispatched by the DOM Events implementation.
The event is dispatched following a path from the root of the tree to this target node. It can then be handled locally at the target node level or from any target's ancestors higher in the tree. The event dispatching (also called event propagation) occurs in three phases and the following order:
Figure: graphical representation of an event dispatched in a DOM tree using the DOM event flow [SVG 1.0 version]
Note: An SVG 1.0 version of the representation above is also available.
The target's ancestors are determined before the initial dispatch of the event. If the target node is removed during the dispatching, or a target's ancestor is added or removed, the event propagation will always be based on the target node and the target's ancestors determined before the dispatch.
Some events may not necessarily accomplish the three phases of
the DOM event flow, e.g. the event could only be defined for one or
two phases. As an example, events defined in this specification
will always accomplish the capture and target phases but some will
not accomplish the bubbling phase ("bubbling events" versus
"non-bubbling events", see also the Event.bubbles
attribute).
Each node encountered during the dispatch of the event may contain event listeners.
Event listeners can be registered on all nodes in the tree for a specific type of event (Event types) or event category (Event types and event categories), phase, and group (Event groups).
If the event listener is being registered on a node while an event gets processed on this node, the event listener will not be triggered during the current phase but may be triggered during a later phase in the event flow, i.e. the bubbling phase.
An event listener is always part of a group. It is either explicitly in a group if a group has been specified at the registration or implicitly in the default group if no group has been specified. Within a group, event listeners are ordered in their order of registration. If two event listeners {A1, A2}, which are part of the same group, are registered one after the other (A1, then A2) for the same phase, the DOM event flow guarantees their triggering order (A1, then A2). If the two listeners are not part of the same group, no specification is made as to the order in which they will be triggered.
In general, a DOM application does not need to define and use a separate group unless other event listeners, external to the DOM application, may change the event propagation (e.g. from a concurrent DOM application, from imported functionalities that rely on the event system, etc.).
Note: While this specification does not specify a full ordering (i.e. groups are still unordered), it does specify ordering within a group. This implies that if the event listeners {A1, A2, B1, B2}, with A and B being two different groups, are registered for the same phase in the order A1, A2, B1, and B2, the following triggering orders are possible and conform to the DOM event flow: {A1, A2, B1, B2}, {A1, B1, A2, B2}, {B1, A1, A2, B2}, {A1, B1, B2, A2}, {B1, A1, B2, A2}, {B1, B2, A1, A2}. DOM Events implementations may impose priorities on groups but DOM applications must not rely on it. Unlike this specification, [DOM Level 2 Events] did not specify any triggering order for event listeners.
When the event is dispatched through the tree, from node to node, event listeners registered on the node are triggered if the following three conditions are all met:
If an event listener is removed from a node while an event is being processed on the node, it will not be triggered by the current actions. Once removed, the event listener is never invoked again (unless registered again for future processing).
It is expected that actions taken by an event listener may cause
additional events to be dispatched. Additional events should be
handled in a synchronous manner and may cause reentrance into the
event model. If an event listener fires a new event using EventTarget.dispatchEvent(),
the event propagation that causes the event listener to be
triggered will resume only after the event propagation of the new
event is completed.
Since implementations may have restrictions such as stack-usage or other memory requirements, applications should not depend on how many synchronous events may be triggered.
All event listeners are part of a group (see Registration of event listeners). An event listener may prevent event listeners that are part of a same group from being triggered. The effect can be:
Event.stopImmediatePropagation());Event.stopPropagation()).If two event listeners are registered for two different groups, one cannot prevent the other from being triggered.
Implementations may have a default action associated with an
event type. An example is the [HTML 4.01] form element. When the user
submits the form (e.g. by pressing on a submit button), the event
{"http://www.w3.org/2001/xml-events", "submit"} is
dispatched to the element and the default action for this event
type is generally to send a request to a Web server with the
parameters from the form.
The default actions are not part of the DOM Event flow. Before invoking a default action, the implementation must first dispatch the event as described in the DOM event flow.
A cancelable event is an event associated with a default action which is allowed to be canceled during the DOM event flow. At any phase during the event flow, the triggered event listeners have the option of canceling the default action or allowing the default action to proceed. In the case of the hyperlink in the browser, canceling the action would have the result of not activating the hyperlink. Not all events defined in this specification are cancelable events.
Different implementations will specify their own default actions, if any, associated with each event. The DOM Events specification does not attempt to specify these actions.
This specification does not provide mechanisms for accessing default actions or adding new ones.
Note: Some implementations also provide default actions
before the dispatch of the event. It is not possible to
cancel those default actions and this specification does not
address them. An example of such default actions can be found in
[DOM
Level 2 HTML] on the HTMLInputElement.checked
attribute.
Each event is associated with a type, called event type.
The event type is composed of a local name and a namespace URI as used in [DOM Level 3
Core]. All events defined in this specification use the
namespace URI "http://www.w3.org/2001/xml-events".
An event type could be part of one or more categories. A category is represented using a local name and a namespace URI as defined in [XML Namespaces]. The event types defined in this specification are not associated with one or more event categories and this specification does not provide methods to associate them. Other specifications may create and associate event categories with event listeners but in such case would need to inform the dispatch mechanism of those event categories. An example of the use of categories is given at Using VoiceXML Events.
Depending on the level of DOM support, or the devices used for
display (e.g. screen) or interaction (e.g. mouse, keyboard, touch
screen, voice, ...), these event types can be generated by the
implementation. When used with an [XML 1.0] or [HTML 4.01]
application, the specifications of those languages may restrict the
semantics and scope (in particular the possible target nodes)
associated with an event type. For example,
{"http://www.w3.org/2001/xml-events", "click"} can be
targeted to all [XHTML 1.0] elements except applet, base,
basefont, bdo, br, font, frame, frameset, head, html, iframe,
isindex, meta, param, script, style, and title. Refer to the
specification defining the language used in order to find those
restrictions or to find event types that are not defined in this
document.
The following list defines all event types (with the exception
of two event types preserved for backward compatibility with
[HTML
4.01], see HTML Events)
provided in this specification. All event types defined in this
specification are bound to the namespace URI
"http://www.w3.org/2001/xml-events" and the following
list only enumerates the local name of the event type.
Note: The activation of an element is device dependent but is also application dependent, e.g. a link in a document can be activated using a mouse click or a mouse double click.
{"http://www.w3.org/2001/xml-events", "mousedown"},
{"http://www.w3.org/2001/xml-events", "mouseup"}, and
{"http://www.w3.org/2001/xml-events", "click"}. Note
that, given the definition of a click, If one or more of the event
types {"http://www.w3.org/2001/xml-events",
"mouseover"}, {"http://www.w3.org/2001/xml-events",
"mousemove"}, and
{"http://www.w3.org/2001/xml-events", "mouseout"}
occur between the press and release of the pointing device button,
the event type {"http://www.w3.org/2001/xml-events",
"click"} cannot occur. In the case of nested elements, this
event type is always targeted at the most deeply nested
element.{"http://www.w3.org/2001/xml-events", "keyup"} is
produced. Whether a keydown contributes or not to the generation of
a text event is implementation dependent.{"http://www.w3.org/2001/xml-events", "keydown"} is
produced. Whether a keyup contributes or not to the generation of a
text event is implementation dependent.{"http://www.w3.org/2001/xml-events",
"DOMNodeRemoved"} will fire before this event type.{"http://www.w3.org/2001/xml-events",
"DOMNodeInserted"} will fire before this event type.Attr has been modified on a node.
The target node of this
event is the parent Element node whose
Attr changed. It is expected that string based
replacement of an Attr value will be viewed as a
modification of the Attr since its identity does not
change. Subsequently replacement of the Attr node with
a different Attr node is viewed as the removal of the
first Attr node and the addition of the second.CharacterData.data or
ProcessingInstruction.data have been modified but the
node itself has not been inserted or deleted. The target node of this event is the
CharacterData node or the
ProcessingInstruction node.namespaceURI and/or the
nodeName of an Element node have been
modified (e.g., the element was renamed using
Document.renameNode()). The target of this event is
the renamed Element node.namespaceURI and/or the
nodeName of a Attr node have been
modified (e.g., the attribute was renamed using
Document.renameNode). The target of this event is the
parent Element node whose Attr has been
renamed.Document node.Document node.The following table provides additional information on the event types. All events will accomplish the capture and target phases, but not all of them will accomplish the bubbling phase (see also DOM event flow). Some events are not cancelable (see Default actions and cancelable events). Some events will only be dispatched to a specific set of possible targets, specified using node types. Contextual information related to the event type is accessible using DOM interfaces.
| type | Bubbling phase | Cancelable | Target node types | DOM interface |
|---|---|---|---|---|
| DOMActivate | Yes | Yes | Element |
UIEvent |
| DOMFocusIn | Yes | No | Element |
UIEvent |
| DOMFocusOut | Yes | No | Element |
UIEvent |
| textInput | Yes | Yes | Element |
TextEvent |
| click | Yes | Yes | Element |
MouseEvent |
| mousedown | Yes | Yes | Element |
MouseEvent |
| mouseup | Yes | Yes | Element |
MouseEvent |
| mouseover | Yes | Yes | Element |
MouseEvent |
| mousemove | Yes | Yes | Element |
MouseEvent |
| mouseout | Yes | Yes | Element |
MouseEvent |
| keydown | Yes | Yes | Element |
KeyboardEvent |
| keyup | Yes | Yes | Element |
KeyboardEvent |
| DOMSubtreeModified | Yes | No | Document,
DocumentFragment, Element,
Attr |
MutationEvent |
| DOMNodeInserted | Yes | No | Element,
Attr, Text, Comment,
CDATASection, DocumentType,
EntityReference,
ProcessingInstruction |
MutationEvent |
| DOMNodeRemoved | Yes | No | Element,
Attr, Text, Comment,
CDATASection, DocumentType,
EntityReference,
ProcessingInstruction |
MutationEvent |
| DOMNodeRemovedFromDocument | No | No | Element,
Attr, Text, Comment,
CDATASection, DocumentType,
EntityReference,
ProcessingInstruction |
MutationEvent |
| DOMNodeInsertedIntoDocument | No | No | Element,
Attr, Text, Comment,
CDATASection, DocumentType,
EntityReference,
ProcessingInstruction |
MutationEvent |
| DOMAttrModified | Yes | No | Element |
MutationEvent |
| DOMCharacterDataModified | Yes | No | Text,
Comment, CDATASection,
ProcessingInstruction |
MutationEvent |
| DOMElementNameChanged | Yes | No | Element |
MutationNameEvent |
| DOMAttributeNameChanged | Yes | No | Element |
MutationNameEvent |
| load | No | No | Document,
Element |
Event |
| unload | No | No | Document,
Element |
Event |
| abort | Yes | No | Element |
Event |
| error | Yes | No | Element |
Event |
| select | Yes | No | Element |
Event |
| change | Yes | No | Element |
Event |
| submit | Yes | Yes | Element |
Event |
| reset | Yes | Yes | Element |
Event |
| resize | Yes | No | Document,
Element |
UIEvent |
| scroll | Yes | No | Document,
Element |
UIEvent |
As an example, the event
{"http://www.w3.org/2001/xml-events", "load"} will
trigger event listeners attached on Element nodes for
that event and on the capture and target phases. This event cannot
be cancelled. If an event listener for the load event is attached
to a node other than Element nodes, or if it is
attached to the bubbling phase only, this event listener cannot be
triggered.
The event objects associated with the event types described above may contain context information. Refer to the description of the DOM interfaces for further information.
Namespace URIs were only
introduced in DOM Level 3 Events and were not part of DOM Level 2
Events. DOM Level 2 Events methods are namespace ignorant and the
event type is only represented by an XML name, specified in the Event.type
attribute.
Therefore, while it is safe to use these methods when not
dealing with namespaces, using them and the new ones at the same
time should be avoided. DOM Level 2 Events methods solely identify
events by their Event.type. On the
contrary, the namespaces aware DOM Level 3 Events methods, identify
attribute nodes by their Event.namespaceURI
and Event.type. Because of
this fundamental difference, mixing both sets of methods can lead
to unpredictable results. For example, using EventTarget.addEventListenerNS(namespaceURI,
type, listener, ...), two event listeners (or more)
could be registered using the same type and same
useCapture values, but different
namespaceURIs. Calling EventTarget.removeEventListener(type,
listener, ...) with that type and
useCapture could then remove any or none of those
event listeners. The result depends on the implementation. The only
guarantee in such cases is that all methods which access an event
listener by its namespaceURI and type
will access the same event listener. For instance, EventTarget.removeEventListenerNS(namespaceURI,
type, listener, ...) removes the event that EventTarget.addEventListenerNS(namespaceURI,
type, listener, ...) added.
For compatibility reasons, the dispatching of an event will
ignore namespace URIs if either the event or the event listener has
a null namespace URI. If a DOM Level 2 event (i.e.
with a null namespace URI) is dispatched in the DOM
tree, all event listeners that match the type will be
triggered as described in the DOM
event flow. If a DOM Level 3 event (i.e. with a namespace URI)
is dispatched in the DOM tree, all event listeners with the same
type and the same or null namespace URI will be
triggered as described in the DOM
event flow.
Note: This section is informative.
There are mainly two ways to associate an event listener to a node in the tree:
EventTarget
methods.EventTarget
methodsThe user can attach an event listener using the methods on the
EventTarget
interface:
myCircle.addEventListenerNS("http://www.w3.org/2001/xml-events",
"DOMActivate",
myListener,
true,
null);
The methods do not provide the ability to register the same event listener more than once for the same event type and the same phase. It is not possible to register an event listener:
To register an event listener, DOM applications must use the
methods EventTarget.addEventListener()
and EventTarget.addEventListenerNS().
An EventListener being
registered on an EventTarget may
choose to have that EventListener
triggered during the capture phase by specifying the
useCapture parameter of the EventTarget.addEventListener()
or EventTarget.addEventListenerNS()
methods to be true. If false, the
EventListener will
be triggered during the target and bubbling phases.
In [XML Events], event listeners are attached using elements and attributes:
<listener event="DOMActivate" observer="myCircle" handler="#myListener"
phase="capture" propagate="stop"/>
Event listeners can only be registered on Element
nodes, i.e. other Node types are not addressable, and
cannot be registered for a specific group either, i.e. they are
always attached to the default group. The target phase and the bubbling phase are coupled during
the registration. [XML Events] does not address namespaces
in event types. If the value of the event attribute of
the listener element contains a colon (':'), it should
be interpreted as a QName as defined in [XML Schema Part
2].
In [VoiceXML 2.0], event listeners are attached using elements:
<form>
<field>
<prompt>Please say something</prompt>
<catch event="error.noauthorization">
<prompt>You don't have the authorization!</prompt>
</catch>
<catch event="connection.disconnect.hangup">
<prompt>Connection error</prompt>
</catch>
<catch event="connection.disconnect">
<prompt>Connection error</prompt>
</catch>
</field>
<catch event="error">
<prompt>Unknown error</prompt>
</catch>
</form>
Event listeners can only be registered on Element
nodes, i.e. other Node types are not addressable, and
cannot be registered for a specific group either, i.e. they are
always attached to the default group. The target phase and the bubbling phase are coupled during
the registration. [VoiceXML 2.0] does not address
namespaces in event types but uses the notion of event categories.
The event type "connection.disconnect.hangup" could be
associated to the event categories
{"http://www.example.org/2003/voicexml", "connection"}
and {"http://www.example.org/2003/voicexml",
"connection.disconnect"}.
In languages such as [HTML 4.01], [XHTML 1.0], or [SVG 1.1], event listeners are specified as attributes:
<circle id="myCircle" onactivate="myListener(evt)"
cx="300" cy="225" r="100" fill="red"/>
Since only one attribute with the same name can appear on an
element, it is therefore not possible to register more than one
event listener on a single EventTarget for the
event type. Also, event listeners can only be registered on
Element nodes for the target phase and bubbling phase, i.e. other
Node types and the capture phase are not addressable
with these languages. Event listeners cannot be registered for a
specific group either, i.e. they are always attached to the default
group.
In order to achieve compatibility with those languages,
implementors may view the setting of attributes which represent
event handlers as the creation and registration of an
EventListener on the EventTarget. The
value of useCapture defaults to false.
This EventListener
behaves in the same manner as any other EventListeners
which may be registered on the EventTarget. If the
attribute representing the event listener is changed, this may be
viewed as the removal of the previously registered EventListener and
the registration of a new one. Furthermore, no specification is
made as to the order in which event attributes will receive the
event with regards to the other EventListeners on
the EventTarget.
The interfaces described in this section are fundamental to DOM Level 3 Events and must always be supported by the implementation.
The Event interface is used to provide contextual
information about an event to the listener processing the event. An
object which implements the Event interface is passed
as the parameter to an EventListener. More
specific context information is passed to event listeners by
deriving additional interfaces from Event which
contain information directly relating to the type of event they
represent. These derived interfaces are also implemented by the
object passed to the event listener.
To create an instance of the Event interface, use
the DocumentEvent.createEvent("Event")
method call.
// Introduced in DOM Level 2: interface Event { // PhaseType const unsigned short CAPTURING_PHASE = 1; const unsigned short AT_TARGET = 2; const unsigned short BUBBLING_PHASE = 3; readonly attribute DOMString type; readonly attribute EventTarget target; readonly attribute EventTarget currentTarget; readonly attribute unsigned short eventPhase; readonly attribute boolean bubbles; readonly attribute boolean cancelable; readonly attribute DOMTimeStamp timeStamp; void stopPropagation(); void preventDefault(); void initEvent(in DOMString eventTypeArg, in boolean canBubbleArg, in boolean cancelableArg); // Introduced in DOM Level 3: readonly attribute DOMString namespaceURI; // Introduced in DOM Level 3: boolean isCustom(); // Introduced in DOM Level 3: void stopImmediatePropagation(); // Introduced in DOM Level 3: boolean isDefaultPrevented(); // Introduced in DOM Level 3: void initEventNS(in DOMString namespaceURIArg, in DOMString eventTypeArg, in boolean canBubbleArg, in boolean cancelableArg); };
An integer indicating which phase of the event flow is being processed as defined in DOM event flow.
AT_TARGETBUBBLING_PHASECAPTURING_PHASEbubbles of type
boolean, readonlytrue, otherwise
the value is false.cancelable of type
boolean, readonlytrue, otherwise the value is
false.currentTarget of
type EventTarget,
readonlyEventTarget whose
EventListeners are
currently being processed. This is particularly useful during the
capture and bubbling phases. This attribute could contain the
target node or a target
ancestor when used with the DOM event
flow.eventPhase of type
unsigned short, readonlynamespaceURI of type
DOMString, readonly, introduced in DOM Level 3null
if it is unspecified.Event.initEvent(),
this is always null.target of type EventTarget,
readonlytimeStamp of type
DOMTimeStamp, readonlytimeStamp may be not available for all events. When
not available, a value of 0 will be returned. Examples
of epoch time are the time of the system start or 0:0:0 UTC 1st
January 1970.type of type
DOMString, readonlyEvent.namespaceURI
is different from null, this attribute represents a
local name.initEventinitEvent method is used to
initialize the value of an Event created through the
DocumentEvent.createEvent
method. This method may only be called before the
Event has been dispatched via the EventTarget.dispatchEvent()
method. If the method is called several times before invoking
EventTarget.dispatchEvent,
only the final invocation takes precedence. This method has no
effect if called after the event has been dispatched. If called
from a subclass of the Event interface only the values
specified in this method are modified, all other attributes are
left unchanged.Event.type attribute
to eventTypeArg, and Event.namespaceURI
to null. To initialize an event with a namespace URI,
use the Event.initEventNS(namespaceURIArg,
eventTypeArg, ...) method.
eventTypeArg of type
DOMStringEvent.type.canBubbleArg of type
booleanEvent.bubbles.
This parameter overrides the intrinsic bubbling behavior of the
event.cancelableArg of type
booleanEvent.cancelable.
This parameter overrides the intrinsic cancelable behavior of the
event.initEventNS introduced
in DOM Level 3initEventNS method is used to
initialize the value of an Event object and has the
same behavior as Event.initEvent().
namespaceURIArg of type
DOMStringEvent.namespaceuRI, the namespace URI associated with this
event, or null if no namespace.eventTypeArg of type
DOMStringEvent.type, the
local name of the event
type.canBubbleArg of type
booleanEvent.initEvent()
method for a description of this parameter.cancelableArg of type
booleanEvent.initEvent()
method for a description of this parameter.isCustom introduced in
DOM Level 3false, unless the event implements the CustomEvent
interface.
|
|
|
isDefaultPrevented
introduced in DOM Level 3true if
the method Event.preventDefault()
has been called for this event, false otherwise.
|
|
|
preventDefaultpreventDefault method is used to signify that the
event is to be canceled, meaning any default action normally taken
by the implementation as a result of the event will not occur (see
also Default actions and
cancelable events), and thus independently of event groups.
Calling this method for a non-cancelable event has no effect.
Note: This method does not stop the event propagation;
use stopPropagation or
stopImmediatePropagation for that effect.
stopImmediatePropagation
introduced in DOM Level 3stopPropagation its effect is immediate (see Event propagation and event
groups). Once it has been called, further calls to that method
have no additional effect.
Note: This method does not prevent the default action
from being invoked; use Event.preventDefault()
for that effect.
stopPropagationcurrentTarget have
been triggered (see Event propagation and event
groups). Once it has been called, further calls to that method
have no additional effect.
Note: This method does not prevent the default action
from being invoked; use preventDefault for that
effect.
The EventTarget interface is implemented by all the
objects which could be event
targets in an implementation which supports the Event flows. The interface allows
registration, removal or query of event listeners, and dispatch of
events to an event target.
When used with DOM event flow,
this interface is implemented by all target nodes and target ancestors,
i.e. all DOM Nodes of the tree support this interface
when the implementation conforms to DOM Level 3 Events and,
therefore, this interface can be obtained by using binding-specific
casting methods on an instance of the Node
interface.
Invoking addEventListener or
addEventListenerNS multiple times on the same
EventTarget with the same parameters
(namespaceURI, type,
listener, and useCapture) is considered
to be a no-op and thus independently of the event group. They do
not cause the EventListener to be
called more than once and do not cause a change in the triggering
order. In order to guarantee that an event listener will be added
to the event target for the specified event group, one needs to
invoke removeEventListener or
removeEventListenerNS first.
// Introduced in DOM Level 2: interface EventTarget { void addEventListener(in DOMString type, in EventListener listener, in boolean useCapture); void removeEventListener(in DOMString type, in EventListener listener, in boolean useCapture); // Modified in DOM Level 3: boolean dispatchEvent(in Event evt) raises(EventException); // Introduced in DOM Level 3: void addEventListenerNS(in DOMString namespaceURI, in DOMString type, in EventListener listener, in boolean useCapture, in DOMObject evtGroup); // Introduced in DOM Level 3: void removeEventListenerNS(in DOMString namespaceURI, in DOMString type, in EventListener listener, in boolean useCapture); // Introduced in DOM Level 3: boolean willTriggerNS(in DOMString namespaceURI, in DOMString type); // Introduced in DOM Level 3: boolean hasEventListenerNS(in DOMString namespaceURI, in DOMString type); };
addEventListeneruseCapture parameter, on the capture phase of the DOM
event flow or its target and bubbling phases.
type of type
DOMStringEvent.type associated
with the event for which the user is registering.listener of type EventListenerlistener parameter takes an object implemented
by the user which implements the EventListener
interface and contains the method to be called when the event
occurs.useCapture of type
booleanuseCapture indicates that the user wishes
to add the event listener for the capture phase only, i.e. this
event listener will not be triggered during the target and bubbling phases. If
false, the event listener will only be triggered
during the target and bubbling phases.addEventListenerNS
introduced in DOM Level 3useCapture parameter, on the capture phase of
the DOM event flow or its target and bubbling phases.
namespaceURI of type
DOMStringEvent.namespaceURI
associated with the event for which the user is
registering.type of type
DOMStringEvent.type associated
with the event for which the user is registering.listener of type EventListenerlistener parameter takes an object implemented
by the user which implements the EventListener
interface and contains the method to be called when the event
occurs.useCapture of type
booleanuseCapture indicates that the user wishes
to add the event listener for the capture phase only, i.e. this
event listener will not be triggered during the target and bubbling phases. If
false, the event listener will only be triggered
during the target and bubbling phases.evtGroup of type
DOMObjectEventListener (see
also Event
propagation and event groups). Use null to attach
the event listener to the default group.dispatchEvent
modified in DOM Level 3EventTarget object on which dispatchEvent
is called.
evt of type Event|
|
Indicates whether any of the listeners which handled the event
called |
|
UNSPECIFIED_EVENT_TYPE_ERR: Raised if the DISPATCH_REQUEST_ERR: Raised if the NOT_SUPPORTED_ERR: Raised if the |
hasEventListenerNS
introduced in DOM Level 3EventTarget contains an event listener
registered for the specified event type. This is useful for
determining at which nodes within a hierarchy altered handling of
specific event types has been introduced, but should not be used to
determine whether the specified event type triggers an event
listener (see EventTarget.willTriggerNS()).
namespaceURI of type
DOMStringEvent.namespaceURI
associated with the event.type of type
DOMStringEvent.type associated
with the event.|
|
|
removeEventListenerremoveEventListener with arguments which do
not identify any currently registered EventListener on
the EventTarget has no effect.
type of type
DOMStringEvent.type for which
the user registered the event listener.listener of type EventListenerEventListener to be
removed.useCapture of type
booleanEventListener being
removed was registered for the capture phase or not. If a listener
was registered twice, once for the capture phase and once for the
target and bubbling phases, each must be removed separately.
Removal of an event listener registered for the capture phase does
not affect the same event listener registered for the target and
bubbling phases, and vice versa.removeEventListenerNS
introduced in DOM Level 3removeEventListenerNS with arguments which do
not identify any currently registered EventListener on
the EventTarget has no effect.
namespaceURI of type
DOMStringEvent.namespaceURI
associated with the event for which the user registered the event
listener.type of type
DOMStringEvent.type associated
with the event for which the user registered the event
listener.listener of type EventListenerEventListener
parameter indicates the EventListener to be
removed.useCapture of type
booleanEventListener being
removed was registered for the capture phase or not. If a listener
was registered twice, once for the capture phase and once for the
target and bubbling phases, each must be removed separately.
Removal of an event listener registered for the capture phase does
not affect the same event listener registered for the target and
bubbling phases, and vice versa.willTriggerNS introduced
in DOM Level 3EventTarget or
one of its ancestors, will be triggered by the specified event type
during the dispatch of the event to this event target or one of its
descendants.
namespaceURI of type
DOMStringEvent.namespaceURI
associated with the event.type of type
DOMStringEvent.type associated
with the event.|
|
|
The EventListener interface is the primary way for
handling events. Users implement the EventListener
interface and register their event listener on an EventTarget. The
users should also remove their EventListener from its
EventTarget after
they have completed using the listener.
Copying a Node, with methods such as
Node.cloneNode or Range.cloneContents,
does not copy the event listeners attached to it. Event listeners
must be attached to the newly created Node afterwards
if so desired.
Moving a Node, with methods
Document.adoptNode, Node.appendChild, or
Range.extractContents, does not affect the event
listeners attached to it.
// Introduced in DOM Level 2: interface EventListener { void handleEvent(in Event evt); };
Event operations may throw an EventException as
specified in their method descriptions.
// Introduced in DOM Level 2: exception EventException { unsigned short code; }; // EventExceptionCode const unsigned short UNSPECIFIED_EVENT_TYPE_ERR = 0; // Introduced in DOM Level 3: const unsigned short DISPATCH_REQUEST_ERR = 1;
An integer indicating the type of error generated.
DISPATCH_REQUEST_ERR, introduced