616 votes

Comment déclencher un événement en JavaScript ?

J'ai attaché un événement à une zone de texte en utilisant addEventListener . Cela fonctionne bien. Mon problème est apparu lorsque j'ai voulu déclencher l'événement de manière programmatique à partir d'une autre fonction.

Comment puis-je le faire ?

13 votes

Mozilla a publié un article très intéressant expliquant Créer et déclencher des événements en Javascript . J'espère que cela vous aidera !

1 votes

Veuillez changer la réponse acceptée en este c'est plus actuel.

2 votes

@RickyStam On dirait que cet article de MDN déplacé ici

3voto

toto Points 185
function fireMouseEvent(obj, evtName) {
    if (obj.dispatchEvent) {
        //var event = new Event(evtName);
        var event = document.createEvent("MouseEvents");
        event.initMouseEvent(evtName, true, true, window,
                0, 0, 0, 0, 0, false, false, false, false, 0, null);
        obj.dispatchEvent(event);
    } else if (obj.fireEvent) {
        event = document.createEventObject();
        event.button = 1;
        obj.fireEvent("on" + evtName, event);
        obj.fireEvent(evtName);
    } else {
        obj[evtName]();
    }
}

var obj = document.getElementById("......");
fireMouseEvent(obj, "click");

1voto

Ifeanyi Amadi Points 281

Vous pouvez utiliser cette fonction que j'ai compilée.

if (!Element.prototype.trigger)
  {
    Element.prototype.trigger = function(event)
    {
        var ev;

        try
        {
            if (this.dispatchEvent && CustomEvent)
            {
                ev = new CustomEvent(event, {detail : event + ' fired!'});
                this.dispatchEvent(ev);
            }
            else
            {
                throw "CustomEvent Not supported";
            }
        }
        catch(e)
        {
            if (document.createEvent)
            {
                ev = document.createEvent('HTMLEvents');
                ev.initEvent(event, true, true);

                this.dispatchEvent(event);
            }
            else
            {
                ev = document.createEventObject();
                ev.eventType = event;
                this.fireEvent('on'+event.eventType, event);
            }
        }
    }
  }

Déclenchez un événement ci-dessous :

var dest = document.querySelector('#mapbox-directions-destination-input');
dest.trigger('focus');

Regardez l'événement :

dest.addEventListener('focus', function(e){
   console.log(e);
});

J'espère que cela vous aidera !

1voto

iProDev Points 377

Vous pouvez utiliser le code ci-dessous pour déclencher un événement en utilisant la méthode Element :

if (!Element.prototype.triggerEvent) {
    Element.prototype.triggerEvent = function (eventName) {
        var event;

        if (document.createEvent) {
            event = document.createEvent("HTMLEvents");
            event.initEvent(eventName, true, true);
        } else {
            event = document.createEventObject();
            event.eventType = eventName;
        }

        event.eventName = eventName;

        if (document.createEvent) {
            this.dispatchEvent(event);
        } else {
            this.fireEvent("on" + event.eventType, event);
        }
    };
}

if (!Element.prototype.triggerEvent) {
    Element.prototype.triggerEvent = function (eventName) {
        var event;

        if (document.createEvent) {
            event = document.createEvent("HTMLEvents");
            event.initEvent(eventName, true, true);
        } else {
            event = document.createEventObject();
            event.eventType = eventName;
        }

        event.eventName = eventName;

        if (document.createEvent) {
            this.dispatchEvent(event);
        } else {
            this.fireEvent("on" + event.eventType, event);
        }
    };
}

var input = document.getElementById("my_input");
var button = document.getElementById("my_button");

input.addEventListener('change', function (e) {
    alert('change event fired');
});
button.addEventListener('click', function (e) {
    input.value = "Bye World";
    input.triggerEvent("change");
});

<input id="my_input" type="input" value="Hellow World">
<button id="my_button">Change Input</button>

0voto

Walle Cyril Points 1131

Le moyen le plus efficace est d'appeler la même fonction que celle qui a été enregistrée avec la fonction addEventListener directement.

Vous pouvez également déclencher un faux événement avec CustomEvent et Cie.

Enfin, certains éléments tels que <input type="file"> soutenir un .click() méthode.

0voto

Dan Alboteanu Points 1570
var btn = document.getElementById('btn-test');
var event = new Event(null);

event.initEvent('beforeinstallprompt', true, true);
btn.addEventListener('beforeinstallprompt', null, false);
btn.dispatchEvent(event);

cela déclenchera immédiatement un évènement avant l'installation

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X