diff --git a/starterOnly/modal.js b/starterOnly/modal.js index 96ee168902..9daa85d4d4 100644 --- a/starterOnly/modal.js +++ b/starterOnly/modal.js @@ -17,14 +17,13 @@ const closeModalBtn = document.querySelector(".close"); // html labels links const formValid = document.getElementById("submit"); const input = document.getElementsByTagName("input"); -const firstName = document.getElementById("first"); -const lastName = document.getElementById("last"); +const firstName = document.getElementById("firstName"); +const lastName = document.getElementById("lastName"); const email = document.getElementById("email"); const birthdate = document.getElementById("birthdate"); const quantity = document.getElementById("quantity"); -const locationChecked = document.getElementsByName("location"); +const locationChoice = document.getElementsByName("location"); const checkbox1 = document.getElementById("checkbox1"); -const checkbox2 = document.getElementById("checkbox2"); // launch modal event modalBtn.forEach((btn) => btn.addEventListener("click", launchModal)); @@ -45,207 +44,147 @@ function closeModal() { bground.style.display = "none"; } -// validation du formulaire -formValid.addEventListener("click", validation) -function validation(event) { - event.preventDefault(); -} +// Validation des champs du formulaire +let form = document.getElementById("reserve") -// Récupération de la valeur des champs à chaque modification -// Uncaught TypeError: input.addEventListener is not a function -// const L.18 utile ? -/*input.addEventListener("input", function(e) { - output.innerHTML = e.target.value; -});*/ +// First name +// function strUcFirst(a){return (a+"").charAt(0).toUpperCase()+a.substr(1);} +form.firstName.addEventListener("change", function(event) { + event.preventDefault (); + validFirstName(this); +}); -// Validité du champ Prénom -// le champ n'est pas vide -// le champ n'est pas remplis de " " -// le champ contient 2 caractères minimum -// le champ accepte des mots composés séparés par "-" ; " ") -// le champ n'accepte pas 2 éléments de séparation consécutifs -// casse indifférente -function strUcFirst(a){return (a+"").charAt(0).toUpperCase()+a.substr(1);} -function firstNameValid(value) { - return /^[\A-Za-z\sàáâãäåçèéêëìíîïðòóôõöùúûüýÿ]+[-\s\A-Za-z\sàáâãäåçèéêëìíîïðòóôõöùúûüýÿ]{2,}$,i/.test(value); -} +// Last name +// function strUcFirst(a){return (a+"").charAt(0).toUpperCase()+a.substr(1);} +form.lastName.addEventListener("change", function(event) { + event.preventDefault (); + validLastName(this); +}); -// Validité du champ Nom -// le champ n'est pas vide -// le champ n'est pas remplis de " " -// le champ contient 2 caractères minimum -// le champ accepte des mots composés séparés par "'" ; "-" ; " ") -// le champ n'accepte pas 2 éléments de séparation consécutifs -// casse indifférente -function strUcFirst(a){return (a+"").charAt(0).toUpperCase()+a.substr(1);} -function lastNameValid(value) { - return /^[\A-Za-z\sàáâãäåçèéêëìíîïðòóôõöùúûüýÿ]+[-'\s\A-Za-z\sàáâãäåçèéêëìíîïðòóôõöùúûüýÿ]{2,}$,i/.test(value); -} +// Email +form.email.addEventListener("change", function(event) { + event.preventDefault (); + validEmail(this); +}); -// Validité du champ email (from W3C) -// le champ n'est pas vide -// le champ n'est pas remplis de " " -// tout caractère ASCII accepté -// espaces et points non acceptés en début ou fin de saisie et si répétés côte à côte -// le champs contient strictement 1 "@" -// le nom de domanaine accepte -// casse indifférente -function emailValid(value) { - return /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@{1}[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*$/.test(value); -} +// Birthdate +form.birthdate.addEventListener("change", function(event) { + event.preventDefault (); + validBirthdate(this); +}); -// Validité de la date de naissance -// format jj/mm/aaaa -// année comprise entre 19.. et 20.. -function birthdateValid(date) { - return /^(0[1-9]|[12]\d|3[01])\/(0[1-9]|1[0-2])\/(19|20)\d{2}$/.test(date); -} +// Quantity of participations +form.quantity.addEventListener("change", function(event) { + event.preventDefault (); + validQuantity(this); +}); -// Validité du nombre de participations -// quantité comprise entre 0 et 99 -function quantityValid(value) { - return /^[0-9]$|^[1-9][0-9]$|^(99)$/.test(value); -} +// Location +// Error +// Uncaught TypeError: form.location.addEventListener is not a function +/*form.location.addEventListener("change", function(event) { + event.preventDefault (); + validLocation(this); +});*/ -// Validité de la sélection d'une ville (bouton radio) -function locationValid() { - const n = location.length; - for (const i=0;i= cutOff13) { - birthdateErrMsg.innerHTML = "Vous devez avoir au moins 13 ans pour participer"; -} - -// Traitement des erreurs du champ "quantity" -if (quantityValid.test == false) { - e.preventDefault(); - first.focus(); - errorQuantity.textContent = "Veuillez saisir un nombre compris entre 0 et 99"; -} - -// Traitement des erreurs des champs "location" -if (locationValid == false) { - e.preventDefault(); - first.focus(); - errorLocation.textContent = "Veuillez cocher une ville"; -} - -// Traitement de la case des conditions générales "checkbox1" -function checkCheckBox1(reserve) { -if (reserve.checkbox1.checked == false) { - e.preventDefault(); - alert("Veuillez accepter les conditions"); - return false; +// Validation du champ "Prénom" +const validFirstName = function(inputFirstName) { + + let firstNameRegExp = new RegExp ( + // le champ n'est pas vide + // le champ n'est pas remplis de " " + // le champ contient 2 caractères minimum + // le champ accepte des mots composés séparés par "-" ; " ") + // le champ n'accepte pas 2 éléments de séparation consécutifs + // casse indifférente + "^[\A-Za-z\sàáâãäåçèéêëìíîïðòóôõöùúûüýÿ]+[-\s\A-Za-z\sàáâãäåçèéêëìíîïðòóôõöùúûüýÿ]{1,}$" + ); + + // Necesairement vrai donc inutile d'ajouter ==true + if (firstNameRegExp.test(inputFirstName.value)) { + } else { } -} +}; + +// Validation du champ "Nom" +const validLastName = function(inputLastName) { + let lastNameRegExp = new RegExp ( + // le champ n'est pas vide + // le champ n'est pas remplis de " " + // le champ contient 2 caractères minimum + // le champ accepte des mots composés séparés par "'" ; "-" ; " ") + // le champ n'accepte pas 2 éléments de séparation consécutifs + // casse indifférente + "^[\A-Za-z\sàáâãäåçèéêëìíîïðòóôõöùúûüýÿ]+[-'\s\A-Za-z\sàáâãäåçèéêëìíîïðòóôõöùúûüýÿ]{1,}$" + ); + + if (lastNameRegExp.test(inputLastName.value)) { + } else { + } +}; + +// Validation du champ "Email" +const validEmail = function(inputEmail) { + let emailRegExp = new RegExp ( + // le champ n'est pas vide + // le champ n'est pas remplis de " " + // tout caractère ASCII accepté + // espaces et points non acceptés en début ou fin de saisie et si répétés côte à côte + // le champs contient strictement 1 "@" et 1 "." ensuite + // le nom de domanaine accepte les formats entreprise + // casse indifférente + "^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@{1}[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*$" + ); + + if (emailRegExp.test(inputEmail.value)) { + } else { + } +}; -// Solution 2 -/*firstName.addEventListener('input', () => { - firstName.setCustomValidity(''); - firstName.checkValidity(); -}); +// Validation du champ "Birthdate" +const validBirthdate = function(inputBirthdate) { + let birthdateRegExp = new RegExp ( + // format jj/mm/aaaa + // année comprise entre 1920 et 2019 + "^(0[1-9]|[12]\d|3[01])\/(0[1-9]|1[0-2])\/(19[2-9]\d|20[01]|\d)$" + ); -firstName.addEventListener('invalid', () => { - if(firstName.value.trim().length === 0) { - firstName.setCustomValidity("Veuillez saisir votre nom"); + if (birthdateRegExp.test(inputBirthdate.value)) { } else { - firstName.setCustomValidity("Votre nom ne peut contenir que des lettres. Il peut être composé"); } -}); +}; -// Solution 3 +// Validité du champ Quantity +const validQuantity = function(inputQuantity) { + let quantityRegExp = new RegExp ( + // quantité comprise entre 0 et 99 + "^[0-9]$|^[1-9][0-9]$|^(99)$" + ); -email.addEventListener("input", function (event) { - // Chaque fois que l'utilisateur saisit quelque chose - // on vérifie la validité du champ e-mail. - if (email.validity.valid) { - // S'il y a un message d'erreur affiché et que le champ - // est valide, on retire l'erreur - error.innerHTML = ""; // On réinitialise le contenu - error.className = "error"; // On réinitialise l'état visuel du message - } -}, false); - -form.addEventListener("submit", function (event) { - // Chaque fois que l'utilisateur tente d'envoyer les données - // on vérifie que le champ email est valide. - if (!email.validity.valid) { - - // S'il est invalide, on affiche un message d'erreur personnalisé - error.innerHTML = "J'attends une adresse e-mail correcte, mon cher !"; - error.className = "error active"; - // Et on empêche l'envoi des données du formulaire - event.preventDefault(); + if (quantityRegExp.test(inputQuantity.value)) { + } else { } -}, false);*/ \ No newline at end of file +}; \ No newline at end of file