Copyright © 2000 W3C® (MIT, INRIA, Keio), All Rights Reserved. W3C liability, trademark, document use and software licensing rules apply.
This specification defines the Document Object Model Level 2 Events, a platform- and language-neutral interface that gives to programs and scripts a generic event system. The Document Object Model Level 2 Events builds on the Document Object Model Level 2 Core [DOM Level 2 Core] and on Document Object Model Level 2 Views [DOM Level 2 Views].
This section describes the status of this document at the time of its publication. Other documents may supersede this document. The latest status of this document series is maintained at the W3C.
This specification is a Superseded Recommendation. A newer specification exists that is recommended for new adoption in place of this specification.
For purposes of the W3C Patent Policy, this Superseded Recommendation has the same status as an active Recommendation; it retains licensing commitments and remains available as a reference for old — and possibly still deployed — implementations, but is not recommended for future implementation. New implementations should follow the Living Standard of the DOM specification.
This document has been produced as part of the W3C DOM Activity. The authors of this document are the DOM Working Group members. Different modules of the Document Object Model have different editors.
Please send general comments about this document to the public mailing list www-dom@w3.org. An archive is available at http://lists.w3.org/Archives/Public/www-dom/.
The English version of this specification is the only normative version. Information about translations of this document is available at http://www.w3.org/2000/11/DOM-Level-2-translations.
The list of known errors in this document is available at http://www.w3.org/2000/11/DOM-Level-2-errata
A list of current W3C Recommendations and other technical documents can be found at http://www.w3.org/TR.
Copyright © 2000 World Wide Web Consortium, (Massachusetts Institute of Technology, Institut National de Recherche en Informatique et en Automatique, 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/copyright-documents-19990405.
Copyright © 1994-2000 World Wide Web Consortium, (Massachusetts Institute of Technology, Institut National de Recherche en Informatique et en Automatique, Keio University). All Rights Reserved.
http://www.w3.org/Consortium/Legal/
Public documents on the W3C site are provided by the copyright holders under the following license. The software or Document Type Definitions (DTDs) associated with W3C specifications are governed by the Software Notice. 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 use, 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/copyright-software-19980720
Copyright © 1994-2000 World Wide Web Consortium, (Massachusetts Institute of Technology, Institut National de Recherche en Informatique et en Automatique, Keio University). All Rights Reserved.
http://www.w3.org/Consortium/Legal/
This W3C work (including software, documents, 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 use, copy, and modify 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, that you make:
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.
The DOM Level 2 Event Model is designed with two main goals. The first goal is the design of a generic event system which allows registration of event handlers, describes event flow through a tree structure, and provides basic contextual information for each event. 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 event model 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 Event Model specification define both the specification for the DOM Event Model and a number of conformant event modules designed for use within the model. The Event Model consists of the two sections on event propagation and event listener registration and the Event interface.
A DOM application may use the hasFeature(feature,
version)
method of the DOMImplementation
interface with parameter values "Events" and "2.0" (respectively)
to determine whether or not the event module is supported by the
implementation. In order to fully support this module, an
implementation must also support the "Core" feature defined in the
DOM Level 2 Core specification [DOM Level 2 Core]. Please, refer
to additional information about
conformance in the DOM Level 2 Core specification [DOM Level 2
Core].
Each event module describes its own feature string in the event module listing.
Event flow is the process through which the an event originates
from the DOM implementation and is passed into the Document Object
Model. The methods of event capture and event bubbling, along with
various event listener registration techniques, allow the event to
then be handled in a number of ways. It can be handled locally at
the EventTarget
level or centrally from an EventTarget
higher in the document tree.
Each event has an EventTarget
toward which the event is directed by the DOM implementation. This
EventTarget
is specified in the Event
's
target
attribute. When the event reaches the target,
any event listeners registered on the EventTarget
are triggered. Although all EventListeners
on the EventTarget
are guaranteed to be triggered by any event which is received by
that EventTarget
, no specification is made as to the
order in which they will receive the event with regards to the
other EventListeners
on the EventTarget
.
If neither event capture or event bubbling are in use for that
particular event, the event flow process will complete after all
listeners have been triggered. If event capture or event bubbling
is in use, the event flow will be modified as described in the
sections below.
Any exceptions thrown inside an EventListener
will not stop propagation of the event. It will continue processing
any additional EventListener
in the described manner.
It is expected that actions taken by EventListener
s
may cause additional events to fire. Additional events should be
handled in a synchronous manner and may cause reentrancy into the
event model.
Event capture is the process by which an EventListener
registered on an ancestor of the
event's target can intercept events of a given type before they are
received by the event's target. Capture operates from the top of
the tree, generally the Document
, downward, making it
the symmetrical opposite of bubbling which is described below. The
chain of EventTarget
s
from the top of the tree to the event's target is determined before
the initial dispatch of the event. If modifications occur to the
tree during event processing, event flow will proceed based on the
initial state of the tree.
An EventListener
being registered on an EventTarget
may choose to have that EventListener
capture events by specifying the useCapture
parameter
of the addEventListener
method to be
true
. Thereafter, when an event of the given type is
dispatched toward a descendant of the
capturing object, the event will trigger any capturing event
listeners of the appropriate type which exist in the direct line
between the top of the document and the event's target. This
downward propagation continues until the event's target is reached.
A capturing EventListener
will not be triggered by events dispatched directly to the EventTarget
upon which it is registered.
If the capturing EventListener
wishes to prevent further processing of the event from occurring it
may call the stopProgagation
method of the Event
interface.
This will prevent further dispatch of the event, although
additional EventListeners
registered at the same hierarchy level will still receive the
event. Once an event's stopPropagation
method has been
called, further calls to that method have no additional effect. If
no additional capturers exist and stopPropagation
has
not been called, the event triggers the appropriate EventListeners
on the target itself.
Although event capture is similar to the delegation based event
model in which all interested parties register their listeners
directly on the target about which they wish to receive
notifications, it is different in two important respects. First,
event capture only allows interception of events which are targeted
at descendants
of the capturing EventTarget
.
It does not allow interception of events targeted to the capturer's
ancestors, its siblings, or its
sibling's descendants.
Secondly, event capture is not specified for a single EventTarget
,
it is specified for a specific type of event. Once specified, event
capture intercepts all events of the specified type targeted toward
any of the capturer's descendants.
Events which are designated as bubbling will initially proceed
with the same event flow as non-bubbling events. The event is
dispatched to its target EventTarget
and any event listeners found there are triggered. Bubbling events
will then trigger any additional event listeners found by following
the EventTarget
's
parent chain upward, checking for any event listeners registered on
each successive EventTarget
.
This upward propagation will continue up to and including the
Document
. EventListener
s
registered as capturers will not be triggered during this phase.
The chain of EventTarget
s
from the event target to the top of the tree is determined before
the initial dispatch of the event. If modifications occur to the
tree during event processing, event flow will proceed based on the
initial state of the tree.
Any event handler may choose to prevent further event
propagation by calling the stopPropagation
method of
the Event
interface. If any EventListener
calls this method, all additional EventListeners
on the current EventTarget
will be triggered but bubbling will cease at that level. Only one
call to stopPropagation
is required to prevent further
bubbling.
Some events are specified as cancelable. For these events, the DOM implementation generally has a default action associated with the event. An example of this is a hyperlink in a web browser. When the user clicks on the hyperlink the default action is generally to active that hyperlink. Before processing these events, the implementation must check for event listeners registered to receive the event and dispatch the event to those listeners. These listeners then have the option of canceling the implementation's 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.
Cancelation is accomplished by calling the Event
's
preventDefault
method. If one or more EventListeners
call preventDefault
during any phase of event flow the
default action will be canceled.
Different implementations will specify their own default actions, if any, associated with each event. The DOM does not attempt to specify these actions.
The EventTarget
interface is implemented by all
Nodes
in an implementation which supports the DOM
Event Model. Therefore, this interface can be obtained by using
binding-specific casting methods on an instance of the
Node
interface. The interface allows registration and
removal of EventListeners
on an EventTarget
and dispatch of events to that
EventTarget
.
// 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); boolean dispatchEvent(in Event evt) raises(EventException); };
addEventListener
EventListener
is added to an EventTarget
while it is processing an
event, it will not be triggered by the current actions but may be
triggered during a later stage of event flow, such as the bubbling
phase.EventListener
s
are registered on the same EventTarget
with the same
parameters the duplicate instances are discarded. They do not cause
the EventListener
to be called twice and since they are discarded they do not need to
be removed with the removeEventListener
method.
type
of type
DOMString
listener
of type EventListener
listener
parameter takes an interface
implemented by the user which contains the methods to be called
when the event occurs.useCapture
of type
boolean
useCapture
indicates that the user wishes
to initiate capture. After initiating capture, all events of the
specified type will be dispatched to the registered EventListener
before being dispatched to any EventTargets
beneath
them in the tree. Events which are bubbling upward through the tree
will not trigger an EventListener
designated to use capture.dispatchEvent
EventTarget
on which dispatchEvent
is called.
evt
of type Event
|
The return value of |
removeEventListener
EventListener
is removed from an EventTarget
while it is processing
an event, it will not be triggered by the current actions. EventListener
s
can never be invoked after being removed.removeEventListener
with arguments which do
not identify any currently registered EventListener
on the EventTarget
has no effect.
type
of type
DOMString
EventListener
being removed.listener
of type EventListener
EventListener
parameter indicates the EventListener
to be
removed.useCapture
of type
boolean
EventListener
being removed was registered as a capturing listener or not. If a
listener was registered twice, one with capture and one without,
each must be removed separately. Removal of a capturing listener
does not affect a non-capturing version of the same listener, and
vice versa.The EventListener
interface is the primary method
for handling events. Users implement the EventListener
interface and register their listener on an EventTarget
using the AddEventListener
method. The users should
also remove their EventListener
from its EventTarget
after they have completed using the listener.
When a Node
is copied using the
cloneNode
method the EventListener
s
attached to the source Node
are not attached to the
copied Node
. If the user wishes the same
EventListener
s to be added to the newly created copy
the user must add them manually.
// Introduced in DOM Level 2: interface EventListener { void handleEvent(in Event evt); };
handleEvent
EventListener
interface was
registered.
In HTML 4.0, event listeners were specified as attributes of an
element. As such, registration of a second event listener of the
same type would replace the first listener. The DOM Event Model
allows registration of multiple event listeners on a single EventTarget
.
To achieve this, event listeners are no longer stored as attribute
values.
In order to achieve compatibility with HTML 4.0, 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. No technique is provided to
allow HTML 4.0 event listeners access to the context information
defined for each event.
The Event
interface is used to provide contextual
information about an event to the handler processing the event. An
object which implements the Event
interface is
generally passed as the first parameter to an event handler. More
specific context information is passed to event handlers by
deriving additional interfaces from Event
which
contain information directly relating to the type of event they
accompany. These derived interfaces are also implemented by the
object passed to the event listener.
// 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); };
An integer indicating which phase of event flow is being processed.
AT_TARGET
EventTarget
.BUBBLING_PHASE
CAPTURING_PHASE
bubbles
of type
boolean
, readonlycancelable
of type
boolean
, readonlycurrentTarget
of type
EventTarget
,
readonlyEventTarget
whose EventListeners
are currently being processed. This is particularly useful during
capturing and bubbling.eventPhase
of type
unsigned short
, readonlytarget
of type EventTarget
,
readonlyEventTarget
to which the event was originally dispatched.timeStamp
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
, readonlyinitEvent
initEvent
method is used to
initialize the value of an Event
created through the
DocumentEvent
interface. This method may only be called before the
Event
has been dispatched via the
dispatchEvent
method, though it may be called multiple
times during that phase if necessary. If called multiple times the
final invocation takes precedence. If called from a subclass of
Event
interface only the values specified in the
initEvent
method are modified, all other attributes
are left unchanged.
eventTypeArg
of type
DOMString
canBubbleArg
of type
boolean
cancelableArg
of type
boolean
preventDefault
preventDefault
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. If,
during any stage of event flow, the preventDefault
method is called the event is canceled. Any default action
associated with the event will not occur. Calling this method for a
non-cancelable event has no effect. Once
preventDefault
has been called it will remain in
effect throughout the remainder of the event's propagation. This
method may be used during any stage of event flow.
stopPropagation
stopPropagation
method is used
prevent further propagation of an event during event flow. If this
method is called by any EventListener
the event will cease propagating through the tree. The event will
complete dispatch to all listeners on the current EventTarget
before event flow stops. This method may be used during any stage
of event flow.
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;
An integer indicating the type of error generated.
UNSPECIFIED_EVENT_TYPE_ERR
Event
's type was
not specified by initializing the event before the method was
called. Specification of the Event's type as null
or
an empty string will also trigger this exception.The DocumentEvent
interface provides a mechanism by
which the user can create an Event of a type supported by the
implementation. It is expected that the DocumentEvent
interface will be implemented on the same object which implements
the Document
interface in an implementation which
supports the Event model.
// Introduced in DOM Level 2: interface DocumentEvent { Event createEvent(in DOMString eventType) raises(DOMException); };
createEvent
eventType
of type
DOMString
eventType
parameter specifies the type of Event
interface to
be created. If the Event
interface
specified is supported by the implementation this method will
return a new Event
of the
interface type requested. If the Event
is to be
dispatched via the dispatchEvent
method the
appropriate event init method must be called after creation in
order to initialize the Event
's values. As
an example, a user wishing to synthesize some kind of UIEvent
would
call createEvent
with the parameter "UIEvents". The
initUIEvent
method could then be called on the newly
created UIEvent
to set
the specific type of UIEvent to be dispatched and set its context
information.createEvent
method is used in creating Event
s when it is
either inconvenient or unnecessary for the user to create an Event
themselves.
In cases where the implementation provided Event
is
insufficient, users may supply their own Event
implementations for use with the dispatchEvent
method.
|
NOT_SUPPORTED_ERR: Raised if the implementation does not support
the type of |
The DOM Level 2 Event Model allows a DOM implementation to support multiple modules of events. The model has been designed to allow addition of new event modules as is required. The DOM will not attempt to define all possible events. For purposes of interoperability, the DOM will define a module of user interface events including lower level device dependent events, a module of UI logical events, and a module of document mutation events. Any new event types defined by third parties must not begin with any upper, lower, or mixed case version of the string "DOM". This prefix is reserved for future DOM event modules. It is also strongly recommended that third parties adding their own events use their own prefix to avoid confusion and lessen the probability of conflicts with other new events.
The User Interface event module is composed of events listed in HTML 4.0 and additional events which are supported in DOM Level 0 browsers.
A DOM application may use the hasFeature(feature,
version)
method of the DOMImplementation
interface with parameter values "UIEvents" and "2.0" (respectively)
to determine whether or not the User Interface event module is
supported by the implementation. In order to fully support this
module, an implementation must also support the "Events" feature
defined in this specification and the "Views" feature defined in
the DOM Level 2 Views specification [DOM Level 2 Views]. Please,
refer to additional information about
conformance in the DOM Level 2 Core specification [DOM Level 2
Core].
Note: To create an instance of the UIEvent
interface, use the feature string "UIEvents" as the value of the
input parameter used with the createEvent
method of
the DocumentEvent
interface.
The UIEvent
interface provides specific contextual
information associated with User Interface events.
// Introduced in DOM Level 2: interface UIEvent : Event { readonly attribute views::AbstractView view; readonly attribute long detail; void initUIEvent(in DOMString typeArg, in boolean canBubbleArg, in boolean cancelableArg, in views::AbstractView viewArg, in long detailArg); };
initUIEvent
initUIEvent
method is used to
initialize the value of a UIEvent
created through the
DocumentEvent
interface. This method may only be called before the
UIEvent
has been dispatched via the
dispatchEvent
method, though it may be called multiple
times during that phase if necessary. If called multiple times, the
final invocation takes precedence.
typeArg
of type
DOMString
canBubbleArg
of type
boolean
cancelableArg
of type
boolean
viewArg
of type
views::AbstractView
Event
's
AbstractView
.detailArg
of type
long
Event
's
detail.The different types of such events that can occur are:
EventTarget
receives focus, for instance via a pointing device being moved onto
an element or by tabbing navigation to the element. Unlike the HTML
event focus, DOMFocusIn can be applied to any focusable EventTarget
,
not just FORM controls.
EventTarget
loses focus, for instance via a pointing device being moved out of
an element or by tabbing navigation out of the element. Unlike the
HTML event blur, DOMFocusOut can be applied to any focusable EventTarget
,
not just FORM controls.
The Mouse event module is composed of events listed in HTML 4.0 and additional events which are supported in DOM Level 0 browsers. This event module is specifically designed for use with mouse input devices.
A DOM application may use the hasFeature(feature,
version)
method of the DOMImplementation
interface with parameter values "MouseEvents" and "2.0"
(respectively) to determine whether or not the Mouse event module
is supported by the implementation. In order to fully support this
module, an implementation must also support the "UIEvents" feature
defined in this specification. Please, refer to additional
information about
conformance in the DOM Level 2 Core specification [DOM Level 2
Core].
Note: To create an instance of the MouseEvent
interface, use the feature string "MouseEvents" as the value of the
input parameter used with the createEvent
method of
the DocumentEvent
interface.
The MouseEvent
interface provides specific
contextual information associated with Mouse events.
The detail
attribute inherited from UIEvent
indicates the number of times a mouse button has been pressed and
released over the same screen location during a user action. The
attribute value is 1 when the user begins this action and
increments by 1 for each full sequence of pressing and releasing.
If the user moves the mouse between the mousedown and mouseup the
value will be set to 0, indicating that no click is occurring.
In the case of nested elements mouse events are always targeted at the most deeply nested element. Ancestors of the targeted element may use bubbling to obtain notification of mouse events which occur within its descendent elements.
// Introduced in DOM Level 2: interface MouseEvent : UIEvent { readonly attribute long screenX; readonly attribute long screenY; readonly attribute long clientX; readonly attribute long clientY; readonly attribute boolean ctrlKey; readonly attribute boolean shiftKey; readonly attribute boolean altKey; readonly attribute boolean metaKey; readonly attribute unsigned short button; readonly attribute EventTarget relatedTarget; void initMouseEvent(in DOMString typeArg, in boolean canBubbleArg, in boolean cancelableArg, in views::AbstractView viewArg, in long detailArg, in long screenXArg, in long screenYArg, in long clientXArg, in long clientYArg, in boolean ctrlKeyArg, in boolean altKeyArg, in boolean shiftKeyArg, in boolean metaKeyArg, in unsigned short buttonArg, in EventTarget relatedTargetArg); };
altKey
of type
boolean
, readonlybutton
of type
unsigned short
, readonlybutton
is used to indicate which mouse
button changed state. The values for button
range from
zero to indicate the left button of the mouse, one to indicate the
middle button if present, and two to indicate the right button. For
mice configured for left handed use in which the button actions are
reversed the values are instead read from right to left.clientX
of type
long
, readonlyclientY
of type
long
, readonlyctrlKey
of type
boolean
, readonlymetaKey
of type
boolean
, readonlyrelatedTarget
of
type EventTarget
,
readonlyEventTarget
related to a UI event. Currently this attribute is used with the
mouseover event to indicate the EventTarget
which the pointing device exited and with the mouseout event to
indicate the EventTarget
which the pointing device entered.screenX
of type
long
, readonlyscreenY
of type
long
, readonlyshiftKey
of type
boolean
, readonlyinitMouseEvent
initMouseEvent
method is used
to initialize the value of a MouseEvent
created
through the DocumentEvent
interface. This method may only be called before the
MouseEvent
has been dispatched via the
dispatchEvent
method, though it may be called multiple
times during that phase if necessary. If called multiple times, the
final invocation takes precedence.
typeArg
of type
DOMString
canBubbleArg
of type
boolean
cancelableArg
of type
boolean
viewArg
of type
views::AbstractView
Event
's
AbstractView
.detailArg
of type
long
Event
's mouse
click count.screenXArg
of type
long
Event
's screen x
coordinatescreenYArg
of type
long
Event
's screen y
coordinateclientXArg
of type
long
Event
's client x
coordinateclientYArg
of type
long
Event
's client y
coordinatectrlKeyArg
of type
boolean
Event
.altKeyArg
of type
boolean
Event
.shiftKeyArg
of type
boolean
Event
.metaKeyArg
of type
boolean
Event
.buttonArg
of type
unsigned short
Event
's mouse
button.relatedTargetArg
of type EventTarget
Event
's related EventTarget
.The different types of Mouse events that can occur are:
mousedown mouseup click
detail
attribute incrementing with
each repetition. This event is valid for most elements.
EventTarget
the pointing device is exiting.EventTarget
the pointing device is entering.The DOM Level 2 Event specification does not provide a key event module. An event module designed for use with keyboard input devices will be included in a later version of the DOM specification.
The mutation event module is designed to allow notification of any changes to the structure of a document, including attr and text modifications. It may be noted that none of the mutation events listed are designated as cancelable. This stems from the fact that it is very difficult to make use of existing DOM interfaces which cause document modifications if any change to the document might or might not take place due to cancelation of the related event. Although this is still a desired capability, it was decided that it would be better left until the addition of transactions into the DOM.
Many single modifications of the tree can cause multiple mutation events to be fired. Rather than attempt to specify the ordering of mutation events due to every possible modification of the tree, the ordering of these events is left to the implementation.
A DOM application may use the hasFeature(feature,
version)
method of the DOMImplementation
interface with parameter values "MutationEvents" and "2.0"
(respectively) to determine whether or not the Mutation event
module is supported by the implementation. In order to fully
support this module, an implementation must also support the
"Events" feature defined in this specification. Please, refer to
additional information about
conformance in the DOM Level 2 Core specification [DOM Level 2
Core].
Note: To create an instance of the MutationEvent
interface, use the feature string "MutationEvents" as the value of
the input parameter used with the createEvent
method
of the DocumentEvent
interface.
The MutationEvent
interface provides specific
contextual information associated with Mutation events.
// Introduced in DOM Level 2: interface MutationEvent : Event { // attrChangeType const unsigned short MODIFICATION = 1; const unsigned short ADDITION = 2; const unsigned short REMOVAL = 3; readonly attribute Node relatedNode; readonly attribute DOMString prevValue; readonly attribute DOMString newValue; readonly attribute DOMString attrName; readonly attribute unsigned short attrChange; void initMutationEvent(in DOMString typeArg, in boolean canBubbleArg, in boolean cancelableArg, in Node relatedNodeArg, in DOMString prevValueArg, in DOMString newValueArg, in DOMString attrNameArg, in unsigned short attrChangeArg); };
An integer indicating in which way the Attr
was
changed.
ADDITION
Attr
was just added.MODIFICATION
Attr
was modified in place.REMOVAL
Attr
was just removed.attrChange
of
type unsigned short
, readonlyattrChange
indicates the type of change which
triggered the DOMAttrModified event. The values can be
MODIFICATION
, ADDITION
, or
REMOVAL
.attrName
of type
DOMString
, readonlyattrName
indicates the name of the changed
Attr
node in a DOMAttrModified event.newValue
of type
DOMString
, readonlynewValue
indicates the new value of the
Attr
node in DOMAttrModified events, and of the
CharacterData
node in DOMCharDataModified
events.prevValue
of type
DOMString
, readonlyprevValue
indicates the previous value of the
Attr
node in DOMAttrModified events, and of the
CharacterData
node in DOMCharDataModified
events.relatedNode
of
type Node
, readonlyrelatedNode
is used to identify a secondary node
related to a mutation event. For example, if a mutation event is
dispatched to a node indicating that its parent has changed, the
relatedNode
is the changed parent. If an event is
instead dispatched to a subtree indicating a node was changed
within it, the relatedNode
is the changed node. In the
case of the DOMAttrModified event it indicates the
Attr
node which was modified, added, or removed.initMutationEvent
initMutationEvent
method is
used to initialize the value of a MutationEvent
created through the DocumentEvent
interface. This method may only be called before the
MutationEvent
has been dispatched via the
dispatchEvent
method, though it may be called multiple
times during that phase if necessary. If called multiple times, the
final invocation takes precedence.
typeArg
of type
DOMString
canBubbleArg
of type
boolean
cancelableArg
of type
boolean
relatedNodeArg
of type
Node
Event
's related
Node.prevValueArg
of type
DOMString
Event
's
prevValue
attribute. This value may be null.newValueArg
of type
DOMString
Event
's
newValue
attribute. This value may be null.attrNameArg
of type
DOMString
Event
's
attrName
attribute. This value may be null.attrChangeArg
of type
unsigned short
Event
's
attrChange
attributeThe different types of Mutation events that can occur are:
Attr
has been modified on a node.
The target of this event is the Node
whose
Attr
changed. The value of attrChange indicates
whether the Attr
was modified, added, or removed. The
value of relatedNode indicates the Attr
node whose
value has been affected. 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.
The HTML event module is composed of events listed in HTML 4.0 and additional events which are supported in DOM Level 0 browsers.
A DOM application may use the hasFeature(feature,
version)
method of the DOMImplementation
interface with parameter values "HTMLEvents" and "2.0"
(respectively) to determine whether or not the HTML event module is
supported by the implementation. In order to fully support this
module, an implementation must also support the "Events" feature
defined in this specification. Please, refer to additional
information about
conformance in the DOM Level 2 Core specification [DOM Level 2
Core].
Note: To create an instance of the Event
interface
for the HTML event module, use the feature string "HTMLEvents" as
the value of the input parameter used with the
createEvent
method of the DocumentEvent
interface.
The HTML events use the base DOM Event interface to pass contextual information.
The different types of such events that can occur are:
This appendix contains the complete OMG IDL [OMGIDL] for the Level 2 Document Object Model Events definitions.
The IDL files are also available as: http://www.w3.org/TR/2000/REC-DOM-Level-2-Events-20001113/idl.zip
// File: events.idl #ifndef _EVENTS_IDL_ #define _EVENTS_IDL_ #include "dom.idl" #include "views.idl" #pragma prefix "dom.w3c.org" module events { typedef dom::DOMString DOMString; typedef dom::DOMTimeStamp DOMTimeStamp; typedef dom::Node Node; interface EventListener; interface Event; // Introduced in DOM Level 2: exception EventException { unsigned short code; }; // EventExceptionCode const unsigned short UNSPECIFIED_EVENT_TYPE_ERR = 0; // 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); boolean dispatchEvent(in Event evt) raises(EventException); }; // Introduced in DOM Level 2: interface EventListener { void handleEvent(in Event evt); }; // 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 2: interface DocumentEvent { Event createEvent(in DOMString eventType) raises(dom::DOMException); }; // Introduced in DOM Level 2: interface UIEvent : Event { readonly attribute views::AbstractView view; readonly attribute long detail; void initUIEvent(in DOMString typeArg, in boolean canBubbleArg, in boolean cancelableArg, in views::AbstractView viewArg, in long detailArg); }; // Introduced in DOM Level 2: interface MouseEvent : UIEvent { readonly attribute long screenX; readonly attribute long screenY; readonly attribute long clientX; readonly attribute long clientY; readonly attribute boolean ctrlKey; readonly attribute boolean shiftKey; readonly attribute boolean altKey; readonly attribute boolean metaKey; readonly attribute unsigned short button; readonly attribute EventTarget relatedTarget; void initMouseEvent(in DOMString typeArg, in boolean canBubbleArg, in boolean cancelableArg, in views::AbstractView viewArg, in long detailArg, in long screenXArg, in long screenYArg, in long clientXArg, in long clientYArg, in boolean ctrlKeyArg, in boolean altKeyArg, in boolean shiftKeyArg, in boolean metaKeyArg, in unsigned short buttonArg, in EventTarget relatedTargetArg); }; // Introduced in DOM Level 2: interface MutationEvent : Event { // attrChangeType const unsigned short MODIFICATION = 1; const unsigned short ADDITION = 2; const unsigned short REMOVAL = 3; readonly attribute Node relatedNode; readonly attribute DOMString prevValue; readonly attribute DOMString newValue; readonly attribute DOMString attrName; readonly attribute unsigned short attrChange; void initMutationEvent(in DOMString typeArg, in boolean canBubbleArg, in boolean cancelableArg, in Node relatedNodeArg, in DOMString prevValueArg, in DOMString newValueArg, in DOMString attrNameArg, in unsigned short attrChangeArg); }; }; #endif // _EVENTS_IDL_
This appendix contains the complete Java [Java] bindings for the Level 2 Document Object Model Events.
The Java files are also available as http://www.w3.org/TR/2000/REC-DOM-Level-2-Events-20001113/java-binding.zip
package org.w3c.dom.events; public class EventException extends RuntimeException { public EventException(short code, String message) { super(message); this.code = code; } public short code; // EventExceptionCode public static final short UNSPECIFIED_EVENT_TYPE_ERR = 0; }
package org.w3c.dom.events; public interface EventTarget { public void addEventListener(String type, EventListener listener, boolean useCapture); public void removeEventListener(String type, EventListener listener, boolean useCapture); public boolean dispatchEvent(Event evt) throws EventException; }
package org.w3c.dom.events; public interface EventListener { public void handleEvent(Event evt); }
package org.w3c.dom.events; public interface Event { // PhaseType public static final short CAPTURING_PHASE = 1; public static final short AT_TARGET = 2; public static final short BUBBLING_PHASE = 3; public String getType(); public EventTarget getTarget(); public EventTarget getCurrentTarget(); public short getEventPhase(); public boolean getBubbles(); public boolean getCancelable(); public long getTimeStamp(); public void stopPropagation(); public void preventDefault(); public void initEvent(String eventTypeArg, boolean canBubbleArg, boolean cancelableArg); }
package org.w3c.dom.events; import org.w3c.dom.DOMException; public interface DocumentEvent { public Event createEvent(String eventType) throws DOMException; }
package org.w3c.dom.events; import org.w3c.dom.views.AbstractView; public interface UIEvent extends Event { public AbstractView getView(); public int getDetail(); public void initUIEvent(String typeArg, boolean canBubbleArg, boolean cancelableArg, AbstractView viewArg, int detailArg); }
package org.w3c.dom.events; import org.w3c.dom.views.AbstractView; public interface MouseEvent extends UIEvent { public int getScreenX(); public int getScreenY(); public int getClientX(); public int getClientY(); public boolean getCtrlKey(); public boolean getShiftKey(); public boolean getAltKey(); public boolean getMetaKey(); public short getButton(); public EventTarget getRelatedTarget(); public void initMouseEvent(String typeArg, boolean canBubbleArg, boolean cancelableArg, AbstractView viewArg, int detailArg, int screenXArg, int screenYArg, int clientXArg, int clientYArg, boolean ctrlKeyArg, boolean altKeyArg, boolean shiftKeyArg, boolean metaKeyArg, short buttonArg, EventTarget relatedTargetArg); }
package org.w3c.dom.events; import org.w3c.dom.Node; public interface MutationEvent extends Event { // attrChangeType public static final short MODIFICATION = 1; public static final short ADDITION = 2; public static final short REMOVAL = 3; public Node getRelatedNode(); public String getPrevValue(); public String getNewValue(); public String getAttrName(); public short getAttrChange(); public void initMutationEvent(String typeArg, boolean canBubbleArg, boolean cancelableArg, Node relatedNodeArg, String prevValueArg, String newValueArg, String attrNameArg, short attrChangeArg); }
This appendix contains the complete ECMAScript [ECMAScript] binding for the Level 2 Document Object Model Events definitions.
Note: Exceptions handling is only supported by ECMAScript implementation conformant with the Standard ECMA-262 3rd. Edition ([ECMAScript]).
The following example will add an ECMAScript based EventListener to the Node 'exampleNode':
// Given the Node 'exampleNode' // Define the EventListener function function clickHandler(evt) { // Function contents } // The following line will add a non-capturing 'click' listener // to 'exampleNode'. exampleNode.addEventListener("click", clickHandler, false);
Many people contributed to this specification, including members of the DOM Working Group and the DOM Interest Group. We especially thank the following:
Lauren Wood (SoftQuad Software Inc., chair), Andrew Watson (Object Management Group), Andy Heninger (IBM), Arnaud Le Hors (W3C and IBM), Ben Chang (Oracle), Bill Smith (Sun), Bill Shea (Merrill Lynch), Bob Sutor (IBM), Chris Lovett (Microsoft), Chris Wilson (Microsoft), David Brownell (Sun), David Singer (IBM), Don Park (invited), Eric Vasilik (Microsoft), Gavin Nicol (INSO), Ian Jacobs (W3C), James Clark (invited), James Davidson (Sun), Jared Sorensen (Novell), Joe Kesselman (IBM), Joe Lapp (webMethods), Joe Marini (Macromedia), Johnny Stenback (Netscape), Jonathan Marsh (Microsoft), Jonathan Robie (Texcel Research and Software AG), Kim Adamson-Sharpe (SoftQuad Software Inc.), Laurence Cable (Sun), Mark Davis (IBM), Mark Scardina (Oracle), Martin Dürst (W3C), Mick Goulish (Software AG), Mike Champion (Arbortext and Software AG), Miles Sabin (Cromwell Media), Patti Lutsky (Arbortext), Paul Grosso (Arbortext), Peter Sharpe (SoftQuad Software Inc.), Phil Karlton (Netscape), Philippe Le Hégaret (W3C, W3C team contact), Ramesh Lekshmynarayanan (Merrill Lynch), Ray Whitmer (iMall, Excite@Home and Netscape), Rich Rollman (Microsoft), Rick Gessner (Netscape), Scott Isaacs (Microsoft), Sharon Adler (INSO), Steve Byrne (JavaSoft), Tim Bray (invited), Tom Pixley (Netscape), Vidur Apparao (Netscape), Vinod Anupam (Lucent).
Thanks to all those who have helped to improve this specification by sending suggestions and corrections.
This specification was written in XML. The HTML, OMG IDL, Java and ECMA Script bindings were all produced automatically.
Thanks to Joe English, author of cost, which was used as the basis for producing DOM Level 1. Thanks also to Gavin Nicol, who wrote the scripts which run on top of cost. Arnaud Le Hors and Philippe Le Hégaret maintained the scripts.
For DOM Level 2, we used Xerces as the basis DOM implementation and wish to thank the authors. Philippe Le Hégaret and Arnaud Le Hors wrote the Java programs which are the DOM application.
Thanks also to Jan Kärrman, author of html2ps, which we use in creating the PostScript version of the specification.
Several of the following term definitions have been borrowed or modified from similar definitions in other W3C or standards documents. See the links within the definitions for more information.
For the latest version of any W3C specification please consult the list of W3C Technical Reports available at http://www.w3.org/TR.