diff --git a/CORRECTION_classes_et_fonctions.md b/CORRECTION_classes_et_fonctions.md new file mode 100644 index 0000000..fb893f8 --- /dev/null +++ b/CORRECTION_classes_et_fonctions.md @@ -0,0 +1,98 @@ +# 🔧 Corrections — classes CSS & ménage dans le JS + +Très bon boulot Guillaume : singulier/pluriel, compteur de caractères, validation à l'envoi, tableau de services généré en JS — tout y est. Deux points à corriger, dont **une notion à bien fixer**. + +--- + +## 1. 🎯 Notion à corriger : les classes HTML se séparent par des **espaces**, pas des virgules + +Dans `services.html` : + +```html +
+``` + +Tu as écrit `class="simulateur, padding_left"`. Le problème : dans l'attribut `class`, les noms de classes se séparent par des **espaces**. Avec ta virgule, le navigateur comprend **deux** classes : +- une classe qui s'appelle littéralement `simulateur,` (avec la virgule collée !) +- une classe `padding_left` + +Donc le jour où tu écriras une règle `.simulateur { ... }` dans ton CSS, **elle ne s'appliquera pas** : ta section ne porte pas la classe `simulateur`, mais `simulateur,`. + +### ✅ La correction +```html +
+``` + +> 🧠 **D'où vient la confusion ?** La virgule, tu l'as vue… mais en **CSS**, pas en HTML. Ce sont deux contextes différents : +> - En **CSS**, la virgule sépare plusieurs **sélecteurs** : `.a, .b { color: red }` = « applique à `.a` **et** à `.b` ». +> - En **HTML**, l'attribut `class` liste les classes d'un élément, séparées par des **espaces** : `class="a b"` = « cet élément a les classes `a` et `b` ». +> +> 💡 **À retenir :** virgule = pour lister des sélecteurs **en CSS**. Espace = pour lister des classes **dans le HTML**. + +**✅ Test :** ajoute temporairement `.simulateur { border: 2px solid red; }` dans ton CSS. Avec la virgule → aucun cadre. Après correction (espace) → le cadre rouge apparaît. + +--- + +## 2. 🧹 Ménage dans `devis.js` : du code en double et du code mort + +Regarde tes trois fonctions : + +```js +function mettreAJourGPS() { + affichageNb.textContent = nbVehicules; + affichageGéo.textContent = nbVehicules * PRIX_GPS; +} +function mettreAJourCONSO() { + affichageNb.textContent = nbVehicules; // ← déjà fait par GPS + affichageConso.textContent = nbVehicules * PRIX_CONSOMMATION; +} +function mettreAJourTOTAL() { // ← jamais appelée ! + affichageNb.textContent = nbVehicules; + affichageGéo.textContent = nbVehicules * PRIX_GPS; + affichageConso.textContent = nbVehicules * PRIX_CONSOMMATION; +} +``` + +Deux soucis : +- `mettreAJourTOTAL` n'est **jamais appelée** : c'est du **code mort** (elle ne sert à rien). +- `mettreAJourGPS` et `mettreAJourCONSO` se **répètent** (toutes les deux refont `affichageNb`), et tu dois les appeler ensemble : `(mettreAJourGPS(), mettreAJourCONSO())`. + +La bonne nouvelle : la fonction qui fait **tout proprement**, tu l'as déjà écrite — c'est `mettreAJourTOTAL` ! Elle met à jour le nombre, le GPS **et** la conso en une seule fois. + +### ✅ La piste (à toi de l'appliquer) +- Garde **une seule** fonction d'affichage (par exemple renomme `mettreAJourTOTAL` en `mettreAJour`). +- Dans tes deux écouteurs `+` et `−`, remplace `(mettreAJourGPS(), mettreAJourCONSO())` par un simple `mettreAJour();`. +- Supprime `mettreAJourGPS` et `mettreAJourCONSO` devenues inutiles. + +> 💡 **À retenir :** quand deux bouts de code font la même chose, on les **réunit dans une seule fonction** qu'on appelle où il faut. Moins de copies = moins de risques d'en oublier une le jour où tu modifies. Et le code jamais appelé, on le **supprime** : il n'apporte rien et brouille la lecture. + +> 🔎 Au passage : `(mettreAJourGPS(), mettreAJourCONSO())` fonctionne, mais ces parenthèses avec une virgule sont une astuce inhabituelle. Deux instructions sur deux lignes (ou un seul `mettreAJour();`) sont plus claires. + +--- + +## 3. 🐛 Petit détail : le message de l'alerte ne dit pas la vérité + +```js +if (zoneMsg.value.trim() === "") { + evenement.preventDefault(); + alert("Merci de remplir tous les champs"); // ← mais tu ne vérifies QUE le message +} +``` + +Ton alerte dit « remplir **tous** les champs », mais ton `if` ne teste que la **textarea** (le nom et l'e-mail peuvent être vides, ça passe quand même). + +À toi de choisir : +- soit ajuster le **texte** (« Merci d'écrire un message »), +- soit **vraiment** vérifier les autres champs aussi (avec des `if` supplémentaires sur `name.value` et `mail.value`). + +> 💡 **À retenir :** un message affiché à l'utilisateur doit correspondre à ce que le code vérifie **réellement**, sinon c'est trompeur. + +--- + +## ✅ Récap + +- [ ] `class="simulateur padding_left"` (espace, pas virgule) +- [ ] Une seule fonction d'affichage du devis ; supprimer le code mort et le code en double +- [ ] Faire correspondre le message de l'alerte à ce qui est vraiment vérifié + +Le reste de ta page est solide. Ces corrections, c'est surtout de la **rigueur** — exactement ce qui fait la différence entre du code qui « marche » et du code propre.