Impossible d'ouvrir ma seconde Modal :(

Fermé
Malo91 - 13 avril 2022 à 10:24
 DoctorHow - 15 avril 2022 à 20:49
Bonjour,
je dois réussir à ouvrir une seconde modal , lorsque je referme ma 1ere qui est un formulaire.

j'avais reussi avec la croix mais pas avec le bouton submit ! bref je suis harchie coincee je ne comprends pas le process :(
merci pour votre aide
mon code : ( j'ai une message d 'erreur cette fois dans ma console : qui dit que je ne peux lire: openSubscribeThankYou.addEventListener("click", openModalThankYou);

// DOM Elements
const modalSubscribe = document.getElementById('modalSubscribe');
const openSubscribe = document.querySelectorAll('.modal-btn');
const closeSubscribe = document.getElementById('closeSubscribe');
const modalSubscribeThankYou = document.getElementById('modalSubscribeThankYou');
const openSubscribeThankYou = document.getElementById('.modal-btn');



// ouverture modal
openSubscribe.forEach((btn) => btn.addEventListener('click', openModal));

function openModal(){
  if (modalSubscribe.classList.contains('hidden')) {
    modalSubscribe.classList.remove('hidden');
  }
}

// fermeture modal  avec la croix
closeSubscribe.addEventListener("click", closeModal);

  function closeModal(){
    if (!modalSubscribe.classList.contains('hidden')) {
      modalSubscribe.classList.add('hidden')
    }
    

// ouverture modal thank you
openSubscribeThankYou.addEventListener("click", openModalThankYou);

function openModalThankYou(){
  if (modalSubscribeThankYou.classList.contains('hidden')) {
    modalSubscribeThankYou.classList.remove('hidden');
  }
};

  };
//modal thankYou  fermeture CROIX 
closeSubscribe.addEventListener("click", closeModalThankYou);

function closeModalThankYou(){
    if (!modalSubscribeThankYou.classList.contains('hidden')) {
      modalSubscribeThankYou.classList.add('hidden');
    }
  };


et mon bout de html :
  <main>
    <div class="hero-section">
      <div class="hero-content">
        <h1 class="hero-headline">
          Marathon national<br>
          de jeux vidéos
        </h1>
        <p class="hero-text">
          Vous aimez jouer ? Notre prochain évènement gaming est ouvert
          aux réservations... Places limitées !
        </p>
        <button class="btn-signup modal-btn">
          je m'inscris
        </button>
      </div>
      <div class="hero-img">
        <img src="./starterOnly/bg_img.jpg" alt="img" />
      </div>
      <button class="btn-signup modal-btn">
        je m'inscris
      </button>
    </div>

    <div class="bground hidden" id="modalSubscribe">
      <div class="content">
        <span id="closeSubscribe" class="close"></span>
        <div class="modal-body">
          <form id="formSubscribe" name="reserve" action="index.html" method="get">
            <div class="formData">
              <label for="first">Prénom</label><br>
              <input class="text-control" type="text" id="first" name="first" minlength="2" /><br>
              <span id="firstError" data-message="Veuillez entrer 2 caractères ou plus pour le champ du prénom"></span>
            </div>
            <div class="formData">
              <label for="last">Nom</label><br>
              <input class="text-control" type="text" id="last" name="last" minlength="2" /><br>
              <span id="lastError" data-message="Veuillez entrer 2 caractères ou plus pour le champ du nom"></span>
            </div>
            <div class="formData">
              <label for="email">E-mail</label><br>
              <input class="text-control" type="email" id="email" name="email" /><br>
              <span id="emailError" data-message="Vous devez entrer un email valide."></span>
            </div>
            <div class="formData">
              <label for="birthdate">Date de naissance</label><br>
              <input class="text-control" type="date" id="birthdate" name="birthdate" /><br>
              <span id="birthdateError" data-message="Vous devez entrer votre date de naissance."></span>
            </div>
            <div class="formData">
              <label for="quantity">À combien de tournois GameOn avez-vous déjà participé ?</label><br>
              <input type="number" class="text-control" id="quantity" name="quantity" min="0" max="99">
              <span id="quantityError" data-message="Veuillez saisir une quantité"></span>
            </div>

            <div class="formData">
              <label for="text-label">A quel tournoi souhaitez-vous participer cette année ?</label><br>
              <input class="checkbox-input" type="radio" id="location1" name="location" value="New York" />
              <label class="checkbox-label" for="location1">
                <span class="checkbox-icon"></span>
                New York</label>
              <input class="checkbox-input" type="radio" id="location2" name="location" value="San Francisco" />
              <label class="checkbox-label" for="location2">
                <span class="checkbox-icon"></span>
                San Francisco</label>
              <input class="checkbox-input" type="radio" id="location3" name="location" value="Seattle" />
              <label class="checkbox-label" for="location3">
                <span class="checkbox-icon"></span>
                Seattle</label>
              <input class="checkbox-input" type="radio" id="location4" name="location" value="Chicago" />
              <label class="checkbox-label" for="location4">
                <span class="checkbox-icon"></span>
                Chicago</label>
              <input class="checkbox-input" type="radio" id="location5" name="location" value="Boston" />
              <label class="checkbox-label" for="location5">
                <span class="checkbox-icon"></span>
                Boston</label>
              <input class="checkbox-input" type="radio" id="location6" name="location" value="Portland" />
              <label class="checkbox-label" for="location6">
                <span class="checkbox-icon"></span>
                Portland</label><br>
              <span id="checkboxError" data-message="Vous devez choisir une option."></span>
            </div>

            <div class="formData">
              <input class="checkbox-input" type="checkbox" id="checkbox1" name="checkbox" />
              <label class="checkbox2-label" for="checkbox1">
                <span class="checkbox-icon"></span>
                J'ai lu et accepté les conditions générales
              </label><br>
              <span id="condGeneError" data-message="Vous devez valider les CGU."></span>
              <br>
              <input class="checkbox-input" type="checkbox" id="checkbox2" />
              <label class="checkbox2-label" for="checkbox2">
                <span class="checkbox-icon"></span>
                Je souhaite être prévenu des prochains évènements.
              </label>
              <br>
            </div>
            <!-- fin du formulaire rempli -->
            <!-- button de submit -->
            <input type="submit" id="btn-register" class="btn-submit " value="C'est parti"> </input>
          </form>
        </div>
      </div>
    </div>
    </div>
<!-- affichage message seconde modal -->
    <div class="bgroundThankYou hidden " id="modalSubscribeThankYou">
      <div class="contentThankYou">
        <p class="btnSecondModal">Vos informations ont été enregistrées<br>
         Merci pour votre inscription</p><br>
      <input type="submit" class="btn-Submit" id="btnModal" value="Fermer">
</div>
</div>
  </main>


merci pour votre aide!
A voir également:

1 réponse

Pitet Messages postés 2826 Date d'inscription lundi 11 février 2013 Statut Membre Dernière intervention 21 juillet 2022 524
14 avril 2022 à 13:30
Bonjour,

La variable openSubscribeThankYou n'est pas initialisée correctement puisque tu affecte sa valeur via l'instruction document.getElementById('.modal-btn'); or il n'y a aucun élément avec cet identifiant dans ton html (.modal-btn est une classe css).

Ajoute un attribut id unique sur le bouton et corrige l'initialisation de la variable comme tu as fait pour les variables modalSubscribe, closeSubscribe ou modalSubscribeThankYou.
1
Salut,
sans oublier qu'un input submit va par défaut envoyer les données du formulaire vers la page indiquée et selon la méthode(GET ou POST) donc recharger la page si on est en GET et cela supprime évidemment tout JavaScript en cours de traitement(ici celui qui affiche la modale).
Pour pallier on peut utiliser .stopPropagation() qui va empêcher le comportement par défaut de la pahse de 'remontée' d'un événement(la première phase c'est sa détection, la remontée c'est ma traduction pas littérale du mot bubbling en anglais qui fait remonter les événements dans la page jusqu'à leur parent/container).

https://developer.mozilla.org/fr/docs/Web/API/Event/stopPropagation

Il faudra bien sûr ajouter le code pour l'envoi avec .submit() une fois la phase passée donc lors de la fermeture de la fenêtre modale si je comprends bien ce que vous voulez faire.

Une autre solution est de remplacer l'input submit par un input bouton(type = button) ou un bouton (<button></button>) et de rajouter le submit avec FORMULAIRE.submit() au moment où on veut envoyer(à la fermeture de la fenêtre modale?)

Cela paraît pas ergonomique parce que la personne pense soumettre son formulaire mais ne le fait pas vraiment et si elle ne ferme pas la modale, change de page elle pensera que le formulaire est envoyé(comportement normal et ergonomique auquel n'importe qui s'attend en appuyant sur envoyer/soumettre le formulaire).

Il serait mieux donc d'afficher la modale après l'envoi, en GET en testant si les données sont envoyées lors du chargement de la page = on affiche la fenêtre modale, si ce n'est pas le cas le formulaire n'est pas soumis et il n'y a rien à afficher. Ou même sur une page différente(on peut aussi rester en GET et indiquer une autre page à charger dans l'attribut action).
Bien sûr il est aussi mieux d'éviter GET car les données ne sont pas sécurisées et affichées dans la barre d'adresse du navigateur(qu'on peut changer à la main)
0