This translation is incomplete. Please help translate this article from English


Crea un event del tipo especificado. El objeto devuelto debe antes ser inicializado y puede, posteriormente, ser pasado a element.dispatchEvent.


event =document.createEvent(type)
  • event es el objeto Event creado.
  • type es una cadena que representa el tipo de evento que se creará. Los tipos de evento posibles incluyes "UIEvents", "MouseEvents", "MutationEvents", y "HTMLEvents". Vea la sección Notas para más detalles.


This article demonstrates how to create and dispatch DOM events. Such events are commonly called synthetic events, as opposed to the events fired by the browser itself.

Creating custom events

Events can be created with the Event constructor as follows:

var event = new Event('build');

// Listen for the event.
elem.addEventListener('build', function (e) { /* ... */ }, false);

// Dispatch the event.

The above code example uses the EventTarget.dispatchEvent() method.

This constructor is supported in most modern browsers (with Internet Explorer being the exception). For a more verbose approach (which works with Internet Explorer), see the old-fashioned way below.

Adding custom data – CustomEvent()

To add more data to the event object, the CustomEvent interface exists and the detail property can be used to pass custom data.
For example, the event could be created as follows:

var event = new CustomEvent('build', { detail: elem.dataset.time });

This will then allow you to access the additional data in the event listener:

function eventHandler(e) {
  console.log('The time is: ' + e.detail);

The old-fashioned way

The older approach to creating events uses APIs inspired by Java. The following shows an example:

// Create the event.
var event = document.createEvent('Event');

// Define that the event name is 'build'.
event.initEvent('build', true, true);

// Listen for the event.
elem.addEventListener('build', function (e) {
  // matches elem
}, false);

// target can be any Element or other EventTarget.

Event bubbling

It is often desirable to trigger an event from a child element, and have an ancestor catch it; optionally, with data:

const form = document.querySelector('form');
const textarea = document.querySelector('textarea');

// Create a new event, allow bubbling, and provide any data you want to pass to the "details" property
const eventAwesome = new CustomEvent('awesome', {
  bubbles: true,
  detail: { text: () => textarea.value }

// The form element listens for the custom "awesome" event and then consoles the output of the passed text() method
form.addEventListener('awesome', e => console.log(e.detail.text()));

// As the user types, the textarea inside the form dispatches/triggers the event to fire, and uses itself as the starting point
textarea.addEventListener('input', e =>;

Creating and dispatching events dynamically

Elements can listen for events that haven't been created yet:

const form = document.querySelector('form');
const textarea = document.querySelector('textarea');

form.addEventListener('awesome', e => console.log(e.detail.text()));

textarea.addEventListener('input', function() {
  // Create and dispatch/trigger an event on the fly
  // Note: Optionally, we've also leveraged the "function expression" (instead of the "arrow function expression") so "this" will represent the element
  this.dispatchEvent(new CustomEvent('awesome', { bubbles: true, detail: { text: () => textarea.value } }))

Triggering built-in events

This example demonstrates simulating a click (that is programmatically generating a click event) on a checkbox using DOM methods. View the example in action.

function simulateClick() {
  var event = new MouseEvent('click', {
    view: window,
    bubbles: true,
    cancelable: true
  var cb = document.getElementById('checkbox'); 
  var cancelled = !cb.dispatchEvent(event);
  if (cancelled) {
    // A handler called preventDefault.
  } else {
    // None of the handlers called preventDefault.
    alert("not cancelled");

See also


Las cadenas de tipo que pueden pasarse a createEvent están definidas enevent modules . Algunos módulos de eventos están definidas en las especificaciones DOM Events, algunos módulos están definidos en otras especificaciones (como SVG) y algunos tipos de eventos son específicos de Gecko. Ver la tabla más abajo para más detalles.

To-do: add event names to the table too.

Modulo de Eventos Tipo de evento para pasar a createEvent Método a usar para inicializar el evento
DOM Level 2 Events
User Interface event module "UIEvents" event.initUIEvent
Mouse event module "MouseEvents" event.initMouseEvent
Mutation event module "MutationEvents" event.initMutationEvent
HTML event module "HTMLEvents" event.initEvent
DOM Level 3 Events
Eventos de interfaz de usuario "UIEvent", "UIEvents" event.initUIEvent
eventos de ratón "MouseEvent", "MouseEvents" event.initMouseEvent
Mutation event module "MutationEvent", "MutationEvents" event.initMutationEvent
Mutation name event module (sin implementar en Gecko a Junio 2006) "MutationNameEvent" event.initMutationNameEvent
eventos de texto "TextEvent" (Gecko también implementa "TextEvents") event.initTextEvent
eventos de teclado "KeyboardEvent" (Gecko también implementa "KeyEvents") event.initKeyEvent (específico de Gecko; la especificación de eventos DOM 3 en desarrollo, usa initKeyboardEvent en su lugar)
eventos básicos "Event" (Gecko también implementa "Events") event.initEvent
SVG 1.1 Scripting
SVG "SVGEvents" (Gecko también implementa "SVGEvent") event.initEvent
"SVGZoomEvents" (Gecko también implementa "SVGZoomEvent") event.initUIEvent
Gecko implementa otros tipos de Eventos La información relevante de Gecko está tomada de nsEventDispatcher::CreateEvent - ver lxr.m.o
- "MouseScrollEvents", "PopupEvents" event.initMouseEvent
"PopupBlockedEvents" event.initPopupBlockedEvent
"XULCommandEvent", "XULCommandEvents" event.initCommandEvent

La razón por la que algunos eventos pueden crearse a partir de dos tipos distintos, es que la especificación DOM Level 3 Events ha cambiado de forma que las cadenas de tipo de eventos son únicas, mientras que se mantiene la compatibilidad con modelos anteriores que admiten nombres plurales.



DOM Level 2 Events: createEvent

DOM Level 3 Events: createEvent