onload qui s'exécute plusieurs fois

Illustration du problème onload Cette fois ci, mon problème, c'est que ma fonction d'initialisation s'exécute plusieurs fois.

Mise en situation

Voilà une illustration de mon problème :

Sur mon window, j'ai une fonction d'initialisation. Il y a un browser dedans, et lorsque je change son contenu, ça exécute le onload du window.

J'ai mis du temps à trouver que c'était le rechargement du browser qui déclenchait l'événement.

Explication

Après investigation, je suis tombé sur un post sur xulfr qui me permet de trouver la solution, et en même temps comprendre le pourquoi du comment.

En fait, l'événement onload se propage, je n'y avais pas pensé du tout, c'est un peu nouveau pour moi, je l'ai découvert grâce à un billet de liguorien (d'ailleurs, je t'ai piqué ton illustration :) ).

Solution

Il faut stopper la propagation de l'événement, vérifier la cible ou la capturer avant, c'est comme vous voulez.

Stopper l'événement

Là c'est simple, l'événement onload s'arrête au browser.

<browser onload="event.stopPropagation();" />

Vérifier la cible

Ici, on agit pendant le onload du window en vérifiant si la cible est bien le document.

<window onload="if (event.target == document) init();">

Je rappelle l'excellent billet de liguorien qui explique la propagation des événements.

Commentaires

1. Le jeudi, septembre 21 2006, 13:07 par ekameleon

Oui on voit ici tout l'intérêt du capturing et du bubbling du système événementiel du W3C DOM2/3 (comme en AS3), c'est vrai que l'utilisation via les balises cela change de l'utilisation directe des événements dans du code ECMAScript mais le principe reste le même :)
Merci pour ce petit article en tout cas très intéressant :)

EKA+ :)