Outils pour utilisateurs

Outils du site


dev:javascript:core:fondamentaux

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
dev:javascript:core:fondamentaux [2024/10/12 14:17] yoanndev:javascript:core:fondamentaux [2024/10/13 11:24] (Version actuelle) yoann
Ligne 217: Ligne 217:
 document.getElementById("anID").checked document.getElementById("anID").checked
 </code> </code>
 +
 +Les boutons radio partagent l'attribut ''name'' mais un seul bouton radio est actif à la fois.
 +
 +<code html>
 +<form>
 +  <label>Préférence de couleur :</label>
 +  <input type="radio" id="red" name="couleur" value="red" checked>
 +  <label for="red">Rouge</label>
 +  <input type="radio" id="blue" name="couleur" value="blue">
 +  <label for="blue">Bleu</label>
 +  <input type="radio" id="green" name="couleur" value="green">
 +  <label for="green">Vert</label>
 +</form>
 +</code>
 +
 +Pour les traiter, on récupère l'ensemble des boutons radio et on les parcours jusqu'a trouver l'attribut checked à vrai :
 +
 +<code javascript>
 +// Récupère tous les balises input de type bouton radio ayant l'attribut name="couleur"
 +let boutons = document.querySelectorAll('input[name="couleur"]');
 +
 +let couleur = "";
 +
 +for (let i = 0; i < boutons.length; i++) {
 +    if (boutons[i].checked) {
 +        couleur = boutons[i].value;
 +        break;
 +    }
 +}
 +
 +// Affiche la valeur du bouton radio coché
 +console.log(couleur);
 +</code>
 +
 +Par défaut, lorsque l'utilisateur clique sur le bouton de soumission du formulaire (champ submit) un appel au serveur distant est initié : cela provoque un rechargement de la page qui empêche l'exécution du code Javascript coté client.
 +
 +Si nos traitements ont lieu côté client, ce comportement par défaut n'est pas approprié : dans ce cas, on peut le désactiver.
 + 
 +Pour désactiver ce comportement par défaut, il faut :
 +
 +  * Écouter cet événement "submit" ;
 +  * Empêcher ce comportement grâce à la méthode ''preventDefault()''.
 +
 +<code javascript>
 +const form = document.getElementById("sform"); 
 +
 +form.addEventListener("submit", (event) => {
 +        // On désactive le rechargement de la page
 +        event.preventDefault();
 +        console.log("Il n’y a pas eu de rechargement de page");
 +});
 +</code>
 +
 +En général, on vérifie la saisie de l'utilisateur lorsque celui-ci renseigne les champs ou envoie le formulaire :
 +
 +  * L’ événement "input" : se déclenche à chaque fois que l’utilisateur tape une lettre dans le champ ;
 +  * L’ événement "change" : se déclenche quand l’utilisateur a fini de taper, et sélectionne un autre élément de la page ;
 +  * L’ événement "submit" : lorsque l'utilisateur valide le formulaire.
 +
 +
 +===== Gestion des erreurs =====
 +
 +Javascript utilise la gestion des exceptions via les instructions **try** / **catch** et **throw**. Ce système permet notamment de reporter/centraliser la gestion des erreurs.
 +
 +<code javascript>
 +
 +function verifyFormField(a_field) {
 +    if (a_field.value === "") {
 +        throw new Error(`Le champ ${a_field.id} est vide`)
 +    }
 +}
 +</code>
 +
 +La fonction définie ci-dessus pourra être appelée n fois dans le code pour chaque champ du formulaire mais selon les besoins, la gestion des erreurs pourra être différente : 
 +
 +<code javascript>
 +let form = document.querySelector("form")
 +
 +form.addEventListener("submit", (event) => {
 +    try {
 +        event.preventDefault();
 +
 +        let name_field = document.getElementById("name");
 +        verifyFormField(name_field);
 +
 +        let mail_field = document.getElementById("email");
 +        verifyFormField(mail_field);
 +
 +        // traitements du formulaire
 +        // ...
 +    } catch (error) {
 +        //gestion des erreurs centralisée et adaptée à l'application ici
 +        console.log("Une erreur est survenue : " + error.message)
 +    }
 +})
 +</code>
 +
 +
 ===== Tests ===== ===== Tests =====
 +
  
 Frameworks de tests : Frameworks de tests :
dev/javascript/core/fondamentaux.1728742674.txt.gz · Dernière modification : 2024/10/12 14:17 de yoann