11499 sujets

JavaScript, DOM et API Web HTML5

Bonsoir
J'ai une structure du genre:
<div onclick="functionA()">
    <button onclick="functionB();">...</button>
</div>
J'aimerais faire en sorte que dans certains cas le traitement de "functionB()" empêche la propagation de l'évènement, en d'autres termes que "functionA()" ne soit pas exécutée.
Je ne me souviens plus comment faire cela en "pur JS", c'est à dire sans JQuery.
Merci de votre aide.
Salut,

Est-ce une contrainte de passer par des évènements inline ? Car l'annulation de la propagation des évènements ne peut se faire avec du JS inline.

En effet c'est grâce au 3e paramètre de la méthode addEventListener que cela est possible
Gili a écrit :
Salut,

Est-ce une contrainte de passer par des évènements inline ? Car l'annulation de la propagation des évènements ne peut se faire avec du JS inline.

En effet c'est grâce au 3e paramètre de la méthode addEventListener que cela est possible

Merci Gili
Non, je dois pouvoir mettre des eventListeners, car lesdits onclick sont générés par Javascript
Pour la balise externe, le code est en fait onclick="document.getElementById('bidule').style.display='none'".
Ce code lui même est ajouté par Javascript car il n'y a pas toujours d'élément 'bidule' dans la page.
Pour le bouton, il y a des cas où il faut remettre ´bidule', visible, mais bien entendu ça le remet invisible immédiatement à cause de la propagation.
Le bouton étant créé dynamiquement, au lieu de mettre un setAttribute('onclick', ´functionB(this)´) je peux mettre un eventListener, mais je ne trouve pas un modèle d'écriture de ce genre de truc. J'ai du faire ca dans le temps, une fois, mais je ne m'en souviens plus et je n'ai pas retrouvé dans ma boîte à outils... (et pourtant Dieu sait s'il y a des choses dedans, mais sans doute y en a-t-il trop!)
Modifié par PapyJP (04 Feb 2016 - 23:47)
J'ai du mal à te suivre. Tu es obligé de passer par l'attribut onclick ou pas ?

Et petite question, pourquoi gérer tes events via l'attribut onclick ? pourquoi ne pas simplement utiliser un gestionnaire d'évènement ?
Gili a écrit :
J'ai du mal à te suivre. Tu es obligé de passer par l'attribut onclick ou pas ?

Et petite question, pourquoi gérer tes events via l'attribut onclick ? pourquoi ne pas simplement utiliser un gestionnaire d'évènement ?

Je me suis mal exprimé.
c'est du code que j'ai récupéré. il y avait des onclicks, puis j'ai voulu ajouter cette histoire de bidule qui apparaît et disparaît, et là ça ne marchait plus à cause de la propagation. S'il faut passer par un eventListener, c'est faisable sans gros problème, mais comme je ne l'ai pas fait depuis longtemps je cherche un modèle de code pour faire ça.
Bonne nuit
Ok Smiley smile

Dans ce cas tu peux t'inspirer du dernier exemple que j'ai donné dans mon lien. C'est juste addEventListener qui prend false en 3e paramètre et ensuite un e.stopPropagation dans la fonction incriminé.

Si l'exemple ne te semble pas clair on regardera ensemble demain si tu veux.

Bonne nuit Smiley smile
Merci Gili
J'ai trouvé un moyen plus simple de traiter le problème, je vais néanmoins me plonger dans ce code pour me remémorer comment ça marche pour une autre fois.