La fonction de gestionnaire de clics de jQuery ne se déclenche pas sur l’élément ajouté après le chargement du DOM

Je crois que je pourrais le faire avec .live mais cette méthode est déconseillée. Voici le problème:

J’ai une fonction de gestion des clics qui doit se déclencher sur n’importe quel élément de la classe “myClickEl” par exemple. Cela fonctionne bien sur les éléments “myClickEl” présents dans le document au moment de son chargement. Cependant, si j’ajoute un élément myClickEl après le chargement du DOM, le gestionnaire de clics ne se déclenche pas.

Voici le code. J’ai essayé les deux méthodes ci-dessous:

Option 1:

jQuery('.myClickEl').on('click', function(){ var formText='This is some text to paste'; jQuery(this).parent().next('textarea').val(''); jQuery(this).parent().next('textarea').val(formText); }); 

Option 2:

  jQuery('.myClickEl').click(function(){ var formText='This is some text to paste'; jQuery(this).parent().next('textarea').val(''); jQuery(this).parent().next('textarea').val(formText); }); 

Vous devez utiliser la délégation d’événements

 jQuery(document).on('click','.myClickEl', function() { var formText='This is some text to paste'; jQuery(this).parent().next('textarea').val(''); jQuery(this).parent().next('textarea').val(formText); }); 

De http://api.jquery.com/on/

Vous êtes intéressé par l’utilisation de sur:

 .on( events [, selector ] [, data ], handler(eventObject) ) 

L’exemple donné par JQuery est

 $( "#dataTable tbody" ).on( "click", "tr", function() { alert( $( this ).text() ); }); 

Et vous devriez faire quelque chose de similaire, en sélectionnant d’abord un élément qui sera statique sur la page, puis le sélecteur d’endroit où l’événement click doit être utilisé.

La meilleure pratique étant d’être aussi spécifique que possible, essayez donc de choisir une première cible raisonnable afin que JS n’ait pas à vérifier chaque événement de clic pour voir s’il doit être exécuté.