JavaScript : rendre le Web interactif (école d'ingénieur) · Chapitre 12 · Exercice de TD
Le bouton Précédent
Projet : la Librairie interactive · niveau 3 (difficile)
Énoncé
Avec replaceState, le bouton Précédent du navigateur quitte le catalogue au lieu de revenir au tri précédent. Modifier la gestion du tri pour que chaque tri choisi crée une entrée d'historique, et que Précédent rétablisse le tri d'avant. Pourquoi ne faut-il pas faire de même pour chaque frappe dans le champ de recherche ?
Corrigé
function lireTri() {
return new URLSearchParams(location.search).get("tri") ?? "titre";
}
function afficher() {
tri.value = lireTri();
etat.textContent = `Catalogue trié par : ${tri.selectedOptions[0].textContent}.`;
}
tri.addEventListener("change", () => {
history.pushState(null, "", `?tri=${encodeURIComponent(tri.value)}`);
afficher();
});
window.addEventListener("popstate", afficher);
afficher();
pushState crée une entrée d'historique par tri ; Précédent ne recharge pas la page, mais déclenche popstate après avoir rétabli l'adresse : afficher n'a qu'à la relire. Vérifié dans Chromium (exercices/ex5-precedent/) : après les tris « Auteur » puis « Prix croissant », Précédent ramène à « Auteur », puis au tri par titre, sans paramètre. Pour la recherche, une entrée par frappe remplirait l'historique de « j », « ja », « jav », « java » : il faudrait appuyer quatre fois sur Précédent pour quitter la page. On garde replaceState pour la frappe.
100 % gratuit
La suite du chapitre est sur Adloun
- 9 autres exercices corrigés dans ce chapitre
- Les 2 QCM du chapitre, le premier sans compte
- Le tuteur, qui guide pas à pas sans donner la réponse
Sans compte : le cours et le premier QCM. Exercices et tuteur : inscription gratuite en 30 secondes, sans carte bancaire.