js/forms.js — gyva validacija
Kodo stulpelyje — js/forms.js, o jame — attachLiveValidation, kuris įgyvendina progresiją. Perskaityk blur ir input klausytojus greta:
el.addEventListener('blur', () => { // (2) palieki lauką → tikrini
touched.add(el.name);
validateField(el.name);
});
el.addEventListener('input', () => { // (3) rašai → tikrini TIK jei jau „touched"
if (touched.has(el.name)) validateField(el.name);
});
Visa gudrybė — aibė touched. Laukas tampa „touched" tik jį palikus (arba pateikus formą). O input klausytojas tikrina tik touched laukus. Taigi:
- Kol nepalikai lauko — tyla (nekrapštom, kol rašai pirmą kartą).
- Palikai su klaida → laukas „touched" → nuo dabar kiekvienas klavišo paspaudimas tikrina, ir klaida dingsta vos ją ištaisius.
validateAll() (grąžinama funkcija) kviečiama per submit: patikrina viską ir pažymi visus laukus „touched", kad toliau būtų gyvas grįžtamasis ryšys.
Nustatymai, kurie veikia. settings.js sujungia tai su būsena: fillForm užpildo iš getSettings(), o per submit saveSettings(...) išsaugo į localStorage IR applyTheme(...) iškart pakeičia temą. Nustatymai — ne dekoracija; jie keičia programą ir išlieka. (settings-store.js laiko DEFAULT_SETTINGS; theme.js — applyTheme.)
Patikrink. Nustatymų formoje:
1. Palik „Display name" tuščią → klaida pasirodo (blur).
2. Pradedi rašyti → klaida dingsta iškart (touched → live).
3. Išsaugai → tema pasikeičia, o perkrovus reikšmės išlieka.
Spąstai (CSS — tikra klaida, kurią sugavom). Įvestis stilizavom taip:
input[type="text"] { ... } /* ← tik type="text" */
input[type="text"]yra tikslaus atitikimo selektorius — jis nestilizuojatype="email",type="url",type="password". Pusė laukelių (el. paštas, URL, slaptažodis) atrodė kitaip. Sprendimas — stilizuoti pagal „viskas, išskyrus žymimuosius":input:not([type="checkbox"]):not([type="radio"]) { ... }Taip pagauni visus teksto tipus vienu kartu, o
checkbox/radio(kurie turi savo išvaizdą) palieki ramybėje.