¿Cómo activar un evento en JavaScript?

Resuelto KoolKabin asked hace 14 años • 19 respuestas

Adjunté un evento a un cuadro de texto usando addEventListener. Funciona bien. Mi problema surgió cuando quería activar el evento mediante programación desde otra función.

¿Cómo puedo hacerlo?

KoolKabin avatar Mar 22 '10 15:03 KoolKabin
Aceptado

Nota: el método initEvent ahora está en desuso. Otras respuestas presentan prácticas actualizadas y recomendadas.


Puede utilizar fireEvent en IE 8 o inferior, y DispatEvent del W3C en la mayoría de los demás navegadores. Para crear el evento que desea activar, puede utilizar createEvento createEventObjectsegún el navegador.

Aquí hay un fragmento de código que se explica por sí mismo (del prototipo) que activa un evento dataavailableen element:

var event; // The custom event that will be created
if(document.createEvent){
    event = document.createEvent("HTMLEvents");
    event.initEvent("dataavailable", true, true);
    event.eventName = "dataavailable";
    element.dispatchEvent(event);
} else {
    event = document.createEventObject();
    event.eventName = "dataavailable";
    event.eventType = "dataavailable";
    element.fireEvent("on" + event.eventType, event);
}
Alsciende avatar Mar 22 '2010 08:03 Alsciende

Un ejemplo práctico:

// Add an event listener
document.addEventListener("name-of-event", function(e) {
  console.log(e.detail); // Prints "Example of an event"
});

// Create the event
var event = new CustomEvent("name-of-event", { "detail": "Example of an event" });

// Dispatch/Trigger/Fire the event
document.dispatchEvent(event);

Para navegadores más antiguos con polyfill y ejemplos más complejos, consulte los documentos de MDN .

Consulte las tablas de soporte para EventTarget.dispatchEventy CustomEvent.

Dorian avatar Dec 12 '2013 16:12 Dorian

Si no desea utilizar jQuery y no está especialmente preocupado por la compatibilidad con versiones anteriores, simplemente utilice:

let element = document.getElementById(id);
element.dispatchEvent(new Event("change")); // or whatever the event type might be

Consulte la documentación aquí y aquí .

EDITAR: Dependiendo de su configuración, es posible que desee agregar bubbles: true:

let element = document.getElementById(id);
element.dispatchEvent(new Event('change', { 'bubbles': true }));
e18r avatar May 29 '2018 15:05 e18r

Si usas jQuery, puedes hacerlo simplemente.

$('#yourElement').trigger('customEventName', [arg0, arg1, ..., argN]);

y manejarlo con

$('#yourElement').on('customEventName',
   function (objectEvent, [arg0, arg1, ..., argN]){
       alert ("customEventName");
});

donde "[arg0, arg1, ..., argN]" significa que estos argumentos son opcionales.

Hilder Vitor Lima Pereira avatar Jul 06 '2014 01:07 Hilder Vitor Lima Pereira