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 12:31] yoanndev:javascript:core:fondamentaux [2024/10/13 11:24] (Version actuelle) yoann
Ligne 151: Ligne 151:
 ==== Réagir aux évènements ==== ==== Réagir aux évènements ====
  
-La programmation évènementielle consiste à définir du code qui sera exécuté lorsque certains évènements se produisent. La méthode consiste à :+La programmation évènementielle consiste à définir du code qui sera exécuté lorsque certains évènements se produisent. Un évènement est un signal envoyé par l’élément HTML lorsque l’utilisateur effectue une action (clic, frappe au clavier, etc). La méthode consiste à :
  
   * Indiquer au moteur Javascript les évènements que l'on souhaite écouter grâce à un **eventListener**;   * Indiquer au moteur Javascript les évènements que l'on souhaite écouter grâce à un **eventListener**;
Ligne 163: Ligne 163:
 </code> </code>
  
-Ici on associe un comportement à l'évènement "click" via une fonction anonyme :+Puis on associe un comportement à un évènement possible comme "click" :
 <code javascript> <code javascript>
 +//syntaxe fonction anonyme
 let bt = document.getElementById("searchBT"); let bt = document.getElementById("searchBT");
-    bt.addEventListener("click", function () { +bt.addEventListener("click", function () { 
-        console.log("Vous avez cliqué sur le bouton"+  console.log("Vous avez cliqué sur le bouton")
-    });+}); 
 +     
 +//syntaxe équivalente fonction fléchée 
 +bt.addEventListener("click", () => { 
 +  console.log("Vous avez cliqué sur le bouton"); 
 +});
 </code> </code>
 +
 +Lorsqu'un évènement se produit, la variable ''event'' permet de récupérer des informations sur le contexte de l'évènement comme par exemple :
 +
 +  * L' élément sur lequel l'évènement s'est produit (''event.target'');
 +  * Les coordonnées de la souris (''event.clientX'' et ''event.clientY'');
 +  * La touche du clavier frappée par l'utilisateur (''event.key'');
 +  * Etc
 +
 +
 +Ici on journalise dans la console les touches frappées par l'utilisateur lorsque la page est active
 +<code javascript>
 +document.addEventListener('keydown', (event) => {
 +    console.log(event.key);
 +});
 +</code>
 +
 +==== Traitement des formulaires ====
 +
 +Les formulaires permettent de regrouper des champs que l'utilisateur peut utiliser pour saisir/transmettre des données à l'application web.
 +
 +Dans le document HTML :
 +<code html>
 +<form>
 +  <label for="sform_tinput">Rechercher :</label>
 +  <input type="text" id="user_input" name="sform_tinput" placeholder="keywords here" required>
 +  <input type="submit" id="searchBT" value="Go">
 +</form>
 +</code>
 +
 +La plupart des champs de formulaire possèdent un attribut **value** qui contient la saisie de l'utilisateur:
 +
 +<code javascript>
 +//Obtenir la valeur saisie par l'utilisateur
 +document.getElementById("user_input").value;
 +</code>
 + 
 +Dans le cas des cases à cocher, il faudra vérifier si la propriété **checked** est vraie ;
 +<code javascript>
 +// L'attribut checked est de type bool
 +document.getElementById("anID").checked
 +</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.1728736302.txt.gz · Dernière modification : 2024/10/12 12:31 de yoann