Zpracování formuláře JavaScriptem
Doba čtení: cca 3 min
V lekci o formulářích jsi se naučil, jak formuláře napsat v HTML. Teď je čas přidat druhou polovinu – JavaScript, který data přečte, ověří a zpracuje. Bez serveru, bez PHP, rovnou v prohlížeči.
Událost submit – zachycení odeslání formuláře
Formulář se odesílá událostí submit. Aby JavaScript mohl data zpracovat a nestránka se nezobnovovala, musíš volat event.preventDefault():
let formular = document.getElementById('kontakt-form');
formular.addEventListener('submit', function (event) {
event.preventDefault(); // zabrání obnovení stránky
// Zde zpracuješ data formuláře
console.log('Formulář byl odeslán.');
});
Metoda preventDefault() zastaví výchozí chování prohlížeče (odeslání na server a obnovení stránky). Bez ní by JavaScript stihl spustit jen část kódu, než by se stránka znovu načetla.
Čtení hodnot z formulářových polí
Hodnotu pole přečteš přes vlastnost .value:
// Textové pole
let jmeno = document.getElementById('jmeno').value;
// Textarea
let zprava = document.getElementById('zprava').value;
// Checkbox (vrací true/false)
let souhlas = document.getElementById('souhlas').checked;
// Select (rozbalovací seznam)
let tema = document.getElementById('tema').value;
Hodnoty jsou vždy textové řetězce (string) – i číselné vstupy. Pokud potřebuješ číslo, převeď ho: parseInt(document.getElementById('vek').value).
Ověření (validace) dat
Než data zpracuješ, ověř jejich správnost. JavaScript validace probíhá před odesláním – uživatel dostane okamžitou zpětnou vazbu bez obnovení stránky:
formular.addEventListener('submit', function (event) {
event.preventDefault();
let jmeno = document.getElementById('jmeno').value.trim();
let email = document.getElementById('email').value.trim();
let chyby = [];
// Povinné pole
if (jmeno === '') {
chyby.push('Vyplňte jméno.');
}
// Ověření e-mailového formátu
if (email === '') {
chyby.push('Vyplňte e-mail.');
} else if (!email.includes('@') || !email.includes('.')) {
chyby.push('E-mail nemá správný formát.');
}
if (chyby.length > 0) {
zobrazChyby(chyby);
return; // zastav zpracování
}
// Vše OK – zpracuj formulář
zpracujFormular(jmeno, email);
});
Metoda .trim() odstraní bílé znaky na začátku a konci řetězce – zabrání situaci, kdy uživatel zadá mezeru a prohlídá to jako vyplněné pole.
Přístupná zpětná vazba
Chybové hlášky a potvrzení musí být čitelné nejen vizuálně, ale i pro VoiceOver. Použij oblast s aria-live, do které JavaScriptem vložíš zprávu:
<!-- HTML -->
<div id="formular-zprava" aria-live="assertive" role="alert"></div>
<form id="kontakt-form">
<label for="jmeno">Jméno</label>
<input type="text" id="jmeno" name="jmeno" required>
<label for="email">E-mail</label>
<input type="email" id="email" name="email" required>
<button type="submit">Odeslat</button>
</form>
// JavaScript
function zobrazChyby(chyby) {
let oblast = document.getElementById('formular-zprava');
oblast.innerHTML = '';
let seznam = document.createElement('ul');
chyby.forEach(function (chyba) {
let polozka = document.createElement('li');
polozka.textContent = chyba;
seznam.appendChild(polozka);
});
oblast.appendChild(seznam);
}
Díky aria-live="assertive" VoiceOver přečte zprávu okamžitě po jejím vložení – bez nutnosti, aby uživatel znovu přejel přes pole.
Kompletní příklad – kontaktní formulář
Spojení HTML, CSS a JavaScriptu do funkčního kontaktního formuláře, který zobrazí potvrzení bez obnovení stránky:
// Zachytíme odeslání
document.getElementById('kontakt-form').addEventListener('submit', function (e) {
e.preventDefault();
let jmeno = document.getElementById('jmeno').value.trim();
let email = document.getElementById('email').value.trim();
let zprava = document.getElementById('zprava').value.trim();
let oblast = document.getElementById('formular-zprava');
// Validace
if (!jmeno || !email || !zprava) {
oblast.textContent = 'Prosím vyplňte všechna povinná pole.';
oblast.style.color = 'red';
return;
}
// Simulace odeslání (bez serveru)
oblast.textContent = `Děkujeme, ${jmeno}! Tvá zpráva byla přijata.
Odpovíme na ${email}.`;
oblast.style.color = 'green';
// Vymazání formuláře po odeslání
this.reset();
});
V reálném projektu by místo simulace následovalo skutečné odeslání na server pomocí technologie fetch() nebo přes e-mailovou službu (Formspree, EmailJS a podobně).
Tip od Zdeňka
Zdeněk radí: Přístupnost formuláře jde ruku v ruce se správným JavaScriptem. aria-live oblast pro chyby je naprostý základ – bez ní VoiceOver o chybách vůbec neví a uživatel neví, proč se formulář neodesílá. A nikdy nezapomeň na event.preventDefault() jako první řádek v obsluze události submit – bez ní JavaScript ani nemá šanci se spustit. Tyto dvě věci si zapamatuj a půl práce máš hotovou.