EventListener, éviter la surchage des évènements Javascript

Si plusieurs scripts javascript doivent se lancer en utilisant window.onload, seul le dernier se lancera correctement. En effet, cette syntaxe provoque une surchage de l'évènement.

Pourtant, il est possible d'ajouter un gestionnaire d'évènement en évitant la surchage; seul problème, la syntaxe est différente selon le navigateur utilisé. Qu'à cela ne tienne, notre fonction eventListener() va résoudre ce problème.

Le problème

Imagions le code suivant :

function test1() {
    document.getElementById('test1').innerHTML = "Message écrit par test1()";
}
window.onload = test1;

function test2() {
    document.getElementById('test2').innerHTML = "Message écrit par test2()";
}
window.onload = test2;

Au chargement de la page, seul la fonction test2() se lancera, affichant uniquement 'Message écrit par test2()', ce qui est assez problématique.

La fonction eventListener()

function eventListener(obj, eventName, func) {
    if (obj.addEventListener) {
        obj.addEventListener(eventName, func, false);
    } else if (obj.attachEvent) {
        obj.attachEvent("on"+eventName, func);
    }
}

Explications

La fonction nécessite 3 paramètres.

function eventListener(obj, eventName, func);
  • obj
    L'objet sur lequel appliquer le gestionnaire d'évènement. (par exemple window)
  • eventName
    Le nom de l'évènement. (par exemple load)
  • func
    La fonction a exécuter lors de l'évènement. (sans les parenthèses)

Utilisation

Nous voulons exécuter correctement le code énoncé dans la partie "Le problème", nous aurions quelque chose ressemblant à ceci :

function test1() {
    document.getElementById('test1').innerHTML = "Message écrit par test1()";
}
eventListener(window, 'load', test1);

function test2() {
    document.getElementById('test2').innerHTML = "Message écrit par test2()";
}
eventListener(window, 'load', test2);

Vous pouvez consulter un exemple en suivant ce lien.

comments powered by Disqus