[Javascript] - Supprimer un élément ajouté dynamiquement

- Supprimer un élément ajouté dynamiquement [Javascript] - Javascript/Node.js - Programmation

Marsh Posté le 04-09-2020 à 15:57:49    

Bonjour,
 
J'ai un petit code javascript qui m'ajoute du code dans un div parent lorsque je clique sur un bouton.
Sur chacune de ses lignes, j'ai un autre bouton permettant de supprimer la ligne en question.
 
Seul problème, la suppression ne fonctionne pas pour les lignes qui ont été ajouté dynamiquement.
J'ai trouvé la solution en passant par JQuery mais j'avais dans l'idée de le faire sans ça, juste pour savoir comment faire.
 
Mon DIV parent:

Code :
  1. <div id="modulesListe">
  2. </div>


 
Mon javascript permettant d'ajouter une ligne:

Code :
  1. document.getElementById('addModule').addEventListener('click', function() {
  2.       document.getElementById('modulesListe').insertAdjacentHTML('beforeend', '<div class="line"><div class="col"><div class="content">test</div></div><div class="col"><a class=""deleteElement">DEL</a></div></div>')
  3. });


 
L'idée est donc d'avoir ce qu'il faut pour qu'en cliquant sur le lien "DEL", que sa ligne entière soit supprimée, même celles ajoutées dynamiquement.
 
Mon javascript permettant de supprimer une ligne (là où j'ai mno problème quoi):

Code :
  1. var deleteElement = document.getElementsByClassName('deleteElement');
  2.         for (var j = 0; j < deleteElement.length; j++) {
  3.             deleteElement[j].addEventListener('click', function() {
  4.                 this.parentNode.parentNode.parentNode.removeChild(this.parentNode.parentNode);
  5.             });
  6.         }


 
Merci !


Message édité par Furaxx le 04-09-2020 à 15:59:50
Reply

Marsh Posté le 04-09-2020 à 15:57:49   

Reply

Marsh Posté le 04-09-2020 à 16:39:47    

Pour ce genre de problématique je penses que la bonne pratique est d'utiliser la délégation d'événement au niveau du bloc conteneur.
 
Ça se fait facilement avec Jquery mais je ne l'ai jamais fait en javacript pur...
 
Apparemment c'est possible mais je n'ai pas testé : https://flaviocopes.com/javascript-event-delegation/
 
Peut être quelque chose comme ça :

Code :
  1. const on = (selector, eventType, childSelector, eventHandler) => {
  2.   const elements = document.querySelectorAll(selector)
  3.   for (element of elements) {
  4.     element.addEventListener(eventType, eventOnElement => {
  5.       if (eventOnElement.target.matches(childSelector)) {
  6.         eventHandler(eventOnElement)
  7.       }
  8.     })
  9.   }
  10. }
  11. on('#modulesListe', 'click', 'a.deleteElement', event => {
  12.   const item = event.target
  13.   item.parentNode.parentNode.parentNode.removeChild(item.parentNode.parentNode);
  14. })


---------------
D3
Reply

Marsh Posté le 04-09-2020 à 19:40:57    

Faut aussi se poser la question du "insertAdjacentHTML" qui si je le comprends bien zappe la réinterprétation du DOM. En travaillant avec des noeuds tu n'aurais pas ce problème car tu pourrais ajouter en même temps tes évènements de suppression.


---------------
C'est en écrivant n'importe quoi qu'on devient n'importe qui.
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed