Rezervační formulář
Návštěvník má místa vybraná a teď si je zarezervuje: napíše své jméno a e-mail a kino mu místa podrží. Zaplatí v pokladně, jak říká stránka. Do výběru míst pod #souhrn přidejte formulář:
<form id="formular-rezervace" novalidate>
<p>
<label for="jmeno">Jméno</label>
<input id="jmeno">
<span id="jmeno-chyba" class="chyba"></span>
</p>
<p>
<label for="email">E-mail</label>
<input id="email" type="email">
<span id="email-chyba" class="chyba"></span>
</p>
<p id="mista-chyba" class="chyba"></p>
<button type="submit">Rezervovat</button>
</form>
<p id="potvrzeni"></p>Stejně jako v miniprojektu Registrační formulář říká atribut novalidate prohlížeči, ať e-mail nekontroluje sám, protože kontrolu dělá váš skript. A v style.css dejte třídě .chyba červenou barvu. Místa nejsou ve formuláři, a na tom záleží: tlačítko (button) uvnitř formuláře po kliknutí formulář odešle.
Kontroly znáte z lekce Události a formuláře: zabraňte novému načtení stránky, odstraňte z textových polí mezery na začátku a na konci a každý problém ukažte u jeho pole, všechny najednou. Jedna kontrola je nová: rezervace bez míst nedává smysl.
Rezervace. Když je všechno v pořádku, uložte rezervaci do pole rezervace jako objekt s id představení, jménem, e-mailem a místy, například:
{ idPredstaveni: 1, jmeno: "Anna", email: "anna@example.com", mista: ["C6", "C7"] }Od té chvíle jsou zarezervovaná místa obsazená. Místo je obsazené, když je v obsazeno představení, nebo v místech některé rezervace na stejné představení. To vám řekne tato funkce s some():
function jeObsazene(misto) {
if (zvolenePredstaveni.obsazeno.includes(misto)) {
return true;
}
return rezervace.some((polozka) => polozka.idPredstaveni === zvolenePredstaveni.id && polozka.mista.includes(misto));
}Použijte ji v zobrazMista() místo zvolenePredstaveni.obsazeno.includes(misto).
Jak psát:
Pokyny
- 1
Přidejte formulář do výběru míst. Po jeho odeslání se stránka nesmí znovu načíst. Zkontrolujte jméno a e-mail, obojí bez mezer na začátku a na konci: když je jméno prázdné, ukažte v
#jmeno-chybatextZadejte své jméno., a když e-mail neobsahuje@, ukažte v#email-chybatextZadejte platnou e-mailovou adresu.Když je pole v pořádku, jeho zprávu vyprázdněte. - 2
Když není vybrané žádné místo, ukažte v
#mista-chybatextVyberte aspoň jedno místo., jinak ho vyprázdněte. - 3
Když je všechno v pořádku, přidejte rezervaci do pole
rezervacea v#potvrzeniukažteRezervováno! Vaše místa: C6, C7(se zarezervovanými místy). Pak vyprázdněte výběr i obě textová pole a místa vykreslete znovu: zarezervovaná místa jsou teď obsazená.