Tema
/
Interneto svetainių kliento dalies kūrimas JS

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 subject pakeitimas 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.