HTML Academy · Lezione

Nozioni di base sulla Constraint Validation API

Leggere lo stato di validità e i messaggi personalizzati con la Constraint Validation API

Lezione 3 di 413 passaggi

Nozioni di base sulla Constraint Validation API è una lezione HTML Academy gratuita su CoddyKit. Questa è la lezione 3 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento HTML Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso HTML Academy include 4 lezioni in totale.

Che cos'è la Constraint Validation API?

La Constraint Validation API è un'interfaccia JavaScript per leggere e impostare lo stato di validazione dei form:

  • Verificare se un campo è valido
  • Leggere quale specifico vincolo non è stato rispettato
  • Impostare messaggi di errore personalizzati
  • Attivare programmaticamente l'interfaccia di validazione del browser

Proprietà validity

Ogni controllo di un form dispone di un oggetto validity con specifici flag booleani:

const input = document.getElementById('email');
const v = input.validity;

console.log(v.valid);         // true if all constraints pass
console.log(v.valueMissing);  // true if required but empty
console.log(v.typeMismatch);  // true if type doesn't match (e.g. bad email)
console.log(v.patternMismatch); // true if pattern fails
console.log(v.tooShort);      // true if shorter than minlength
console.log(v.tooLong);       // true if longer than maxlength
console.log(v.rangeUnderflow); // true if less than min
console.log(v.rangeOverflow);  // true if more than max

Metodo checkValidity

checkValidity() restituisce true/false e attiva l'evento invalid:

const form = document.getElementById('my-form');

// Check entire form:
if (!form.checkValidity()) {
  console.log('Form has errors');
}

// Check individual field:
const email = document.getElementById('email');
if (!email.checkValidity()) {
  console.log('Email is invalid');
}
// The 'invalid' event fires on invalid fields

Metodo reportValidity

reportValidity() mostra l'interfaccia nativa di validazione del browser:

const input = document.getElementById('username');

// Shows native browser error tooltip if invalid:
const valid = input.reportValidity();
console.log(valid);  // true or false

// On a form: validates all fields and shows first error:
document.getElementById('form').reportValidity();

Proprietà validationMessage

validationMessage restituisce la stringa del messaggio di errore del browser:

const email = document.querySelector('input[type=email]');
email.value = 'not-an-email';

console.log(email.validationMessage);
// e.g. "Please include an '@' in the email address..."

console.log(email.validity.typeMismatch); // true

setCustomValidity

setCustomValidity(message) imposta un errore di validazione personalizzato:

const username = document.getElementById('username');

// Check availability on blur:
username.addEventListener('blur', async () => {
  const res = await fetch(`/check-username?name=${username.value}`);
  const { taken } = await res.json();

  if (taken) {
    username.setCustomValidity('This username is already taken.');
  } else {
    username.setCustomValidity('');  // empty string = clear the error
  }
});

Cancellare la validità personalizzata

È necessario cancellare la validità personalizzata quando l'utente risolve il problema:

const input = document.getElementById('username');

input.addEventListener('input', () => {
  // Clear custom error when user starts typing again:
  input.setCustomValidity('');
});

input.addEventListener('blur', async () => {
  // Re-validate on blur:
  const taken = await checkUsername(input.value);
  input.setCustomValidity(taken ? 'Username taken' : '');
});

Evento invalid

L'evento invalid viene attivato sui controlli del form che non superano la validazione:

document.querySelectorAll('input').forEach(input => {
  input.addEventListener('invalid', (e) => {
    e.preventDefault();  // prevent default browser tooltip
    // Show your custom error UI instead:
    showError(input, input.validationMessage);
  });
});

Proprietà will-validate

willValidate è true se l'elemento partecipa alla validazione dei vincoli:

document.querySelectorAll(':input').forEach(el => {
  if (el.willValidate) {
    console.log(el.name, 'will be validated');
  }
});
// Disabled, hidden, or output elements return willValidate = false

Usare Validity nella validazione personalizzata

Un esempio completo di validazione personalizzata:

<form id="signup" novalidate>
  <input type="email" id="email" name="email" required>
  <span id="email-err" role="alert"></span>
  <button type="submit">Sign Up</button>
</form>

<script>
const form = document.getElementById('signup');
const email = document.getElementById('email');
const err = document.getElementById('email-err');

form.addEventListener('submit', (e) => {
  e.preventDefault();
  err.textContent = '';

  if (email.validity.valueMissing) {
    err.textContent = 'Email is required.';
    email.focus();
    return;
  }
  if (email.validity.typeMismatch) {
    err.textContent = 'Enter a valid email address.';
    email.focus();
    return;
  }
  // Submit...
});
</script>

Riepilogo dei flag di ValidityState

Tutti i flag di ValidityState:

  • valueMissing — obbligatorio ma vuoto
  • typeMismatch — formato del tipo errato
  • patternMismatch — il pattern regex non corrisponde
  • tooShort / tooLong — minlength/maxlength
  • rangeUnderflow / rangeOverflow — min/max
  • stepMismatch — valore non valido per lo step
  • customError — è stato impostato un messaggio con setCustomValidity
  • badInput — il browser non riesce a interpretare il valore

Verifica rapida

Come si visualizza programmaticamente il popup nativo del browser con l'errore di validazione?

Riepilogo: Constraint Validation API

Concetti essenziali della Constraint Validation API:

  • input.validity — oggetto ValidityState con flag specifici
  • checkValidity() — restituisce true/false e attiva l'evento invalid
  • reportValidity() — verifica e mostra l'interfaccia nativa degli errori
  • validationMessage — la stringa di errore del browser
  • setCustomValidity(msg) — imposta un errore personalizzato; usa una stringa vuota per cancellarlo
Gratis per iniziare

Impara HTML con un tutor IA — gratis

Scrivi ed esegui vero codice nel tuo browser, ricevi aiuto istantaneo da un tutor IA disponibile 24/7, e riprendi da dove hai lasciato sul web o nell'app.

Corsi
40
Lezioni
159

Domande Frequenti

La lezione «Nozioni di base sulla Constraint Validation API» è gratuita?

Sì — il testo completo di «Nozioni di base sulla Constraint Validation API» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso HTML Academy, passa a CoddyKit PRO. Il corso HTML Academy include 4 lezioni in totale.

Cosa imparerò in «Nozioni di base sulla Constraint Validation API»?

Leggere lo stato di validità e i messaggi personalizzati con la Constraint Validation API Eserciti HTML Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.

Ho bisogno di esperienza per iniziare HTML Academy?

Non è richiesta alcuna esperienza precedente. HTML Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 3 di 4.

Quanto tempo richiede la lezione «Nozioni di base sulla Constraint Validation API»?

La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.

Posso scrivere ed eseguire codice in questa lezione HTML Academy?

Sì. Ogni lezione HTML Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.

Tutte le lezioni di questo corso

  1. required pattern min max e maxlength
  2. L’attributo novalidate
  3. Nozioni di base sulla Constraint Validation API
  4. Convalida HTML5 e JavaScript a confronto
← Torna a HTML Academy