Fenêtre modale Boostrap 5 chargée en Ajax

Lorsqu’on a besoin d’ouvrir une fenêtre modale Bootstrap mais qu’on ne souhaite pas que tout son contenu soit chargé au préalable sur la page, il peut être intéressant de mettre en place un chargement en AJAX.

L’idée est la suivante : on se base sur l’attribut data-modal-href des liens pour écouter les événements de clic ; on injecte le code HTML de la fenêtre modale « vide » dans la page ; on charge le contenu en AJAX.

Comme Bootstrap 5 ne dépend plus de jQuery, nous allons écrire ce système en JavaScript natif.

Dans le code de la page principale, le lien destiné à ouvrir la modale sera de la forme suivante :

Dans notre script, il faudra écouter les clics sur ces liens, afin de déclencher l’ouverture de la fenêtre modale. Ici, le clic déclenche la fonction getAjaxModalElement, qui est chargée de créer l’élément HTML destiné à accueillir le contenu charger en Ajax s’il n’existe pas déjà sur le document. On instancie ensuite un objet Modal fourni par Bootstrap, qui contiendra notre code HTML par défaut, indiquant le chargement en cours.

Ensuite, nous lançons le fetch vers l’URL de l’attribut data-modal-href du lien, et nous injectons la réponse HTML dans la fenêtre modale déjà affichée.

Ci-dessous un exemple du code HTML que devra renvoyer la page chargée en AJAX modal-content.html. Notez qu’il ne faut fournir que les balises à partir du niveau .modal-content, car les parents .modal-dialog et .modal sont gérés depuis le JavaScript.