Adloun

NSI (première) · Chapitre 10 · Exercice de TD

Camille écrit un formulaire de recherche entièrement traité dans la…

Interagir sur le Web · Événements et état de la page · niveau 3 (difficile)

Énoncé

Camille écrit un formulaire de recherche entièrement traité dans la page.


<form id="f">
  <input type="text" id="ville" name="ville">
  <button type="submit">Chercher</button>
</form>
<p id="resultat"></p>

const f = document.getElementById("f");
f.addEventListener("submit", function (e) {
    const v = document.getElementById("ville").value;
    document.getElementById("resultat").textContent = "Recherche : " + v;
});

Elle saisit Nantes et clique. Le texte « Recherche : Nantes » apparaît un instant, puis disparaît, et la barre d'adresse a changé.

  • Expliquer précisément les deux phénomènes.
  • Qu'affiche exactement la barre d'adresse ?
  • Corriger le code.
  • Que se passerait-il si le formulaire portait method="post" action="/chercher" ?

Corrigé

1. Un événement a une action par défaut, que le navigateur exécute en plus du gestionnaire. Celle de submit est d'envoyer le formulaire. Le gestionnaire de Camille s'exécute bien — d'où le texte visible un instant — puis le navigateur envoie le formulaire, reçoit une réponse, remplace la page et relance le script depuis le début. Le paragraphe resultat de la nouvelle page est vide : voilà la disparition.

La barre d'adresse change pour une seconde raison : le formulaire n'a ni method ni action. Par défaut, la méthode est GET et la destination est la page courante. Le navigateur recharge donc la même page en y ajoutant les paramètres.

2. Si la page était https://exemple.fr/meteo.html, l'adresse devient https://exemple.fr/meteo.html?ville=Nantes.

3. Il faut annuler l'action par défaut, ce que l'argument e — l'objet événement — permet de faire :


f.addEventListener("submit", function (e) {
    e.preventDefault();
    const v = document.getElementById("ville").value;
    document.getElementById("resultat").textContent = "Recherche : " + v;
});

4. Avec method="post" et action="/chercher", le navigateur enverrait une requête POST vers /chercher avec ville=Nantes dans le corps, et remplacerait la page par la réponse du serveur. Le texte écrit par le gestionnaire disparaîtrait de la même façon — mais cette fois l'adresse ne porterait aucun paramètre.

Contrôle : dans les deux cas, le symptôme « le texte clignote puis s'en va » a la même cause unique — la page est remplacée. Ce n'est jamais le gestionnaire qui échoue.

Ce qu'il faut retenir : un gestionnaire ne remplace pas le comportement du navigateur, il s'y ajoute. Deux événements ont une action par défaut qu'on annule presque toujours quand on traite soi-même : submit pour un formulaire, click sur un lien <a>.

100 % gratuit

Essaie le suivant avec le tuteur

Faire l'exercice suivant avec le tuteur

Sans compte : le cours, 2 minutes de podcast et de vidéo et un exercice avec le tuteur. Pour tout le reste : inscription gratuite en 30 secondes, sans carte bancaire.

Le cours du chapitre · Tous les exercices du chapitre

Exercice suivant avec le tuteur →