js/views/contact.js — kryžminė validacija
Kodo stulpelyje — js/views/contact.js. Naudoja 11 pamokos attachLiveValidation, bet su kryžminėmis taisyklėmis ir pilnu pateikimo ciklu.
Kryžminė dalis — rules(values):
function rules(values) {
const base = { /* name, email, subject, message: min 20 */ };
if (values.subject === 'bug') {
base.message = [required('Message'), minLength(50, 'A bug report'), maxLength(1000)];
}
return base;
}
Kadangi attachLiveValidation kaskart kviečia getRules(values) su dabartinėmis reikšmėmis, pasirinkus „Bug report" žinutės taisyklė iškart tampa griežtesnė (min 50). Pakeitęs temą — laukas persivertina.
Pateikimo ciklas submit viduje:
submitBtn.disabled = true;
submitBtn.textContent = 'Sending…';
try {
await fakeSend(result.values);
// ...rodom sėkmės panelę...
} catch (error) {
showToast(error.message, 'error');
} finally {
submitBtn.disabled = false;
submitBtn.textContent = 'Send message';
}
finally svarbus: kad ir pavyko, ir nepavyko — mygtukas visada atsistato. Be jo, po klaidos mygtukas liktų „Sending…" ir išjungtas amžinai.
Ir fakeSend — sąžininga imitacija (netgi „atmeta" @example.com, kad pamatytum klaidos kelią):
// Tikroji versija: await fetch('/api/contact', { method:'POST', ... })
// Aplink esantis kodas nesikeičia — tik ši funkcija.
Patarimas. Atkreipk dėmesį, kad
subjectpakeitimas atnaujina ir užuominą po lauku („bug reports: 50+ characters"). Gera forma paaiškina taisyklę prieš vartotojui į ją atsitrenkiant, ne tik parodo klaidą po fakto.