0Pricing
HTML Academy · Lezione

reportValidity e setCustomValidity

Attivare l’interfaccia di convalida del browser e impostare messaggi di errore personalizzati

reportValidity e setCustomValidity è 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.

Due API per l'esperienza utente nativa

La Constraint Validation API espone due metodi che controllano l'interfaccia di validazione integrata del browser: reportValidity (mostra il tooltip) e setCustomValidity (fornisce un messaggio di errore personalizzato). Insieme consentono di personalizzare i messaggi mantenendo la presentazione nativa.

reportValidity e checkValidity

checkValidity() restituisce silenziosamente true/false, senza effetti sull'interfaccia. reportValidity() esegue lo stesso controllo, ma porta inoltre il focus sul primo campo non valido e mostra il tooltip di validazione del browser. Scelga reportValidity quando desidera ottenere gratuitamente un'esperienza utente nativa.

document.forms.signup.addEventListener("submit", (e) => {
  if (!e.target.reportValidity()) {
    e.preventDefault();
    // browser already focused first invalid field and showed tooltip
  }
});

Validazione programmatica

Per le procedure guidate a più passaggi, convalidi i campi di ogni passaggio prima di avanzare: if (step.reportValidity()) { next(); }. Il browser gestisce la visualizzazione dell'errore e porta il focus dell'utente sul campo che richiede attenzione, evitando di dover reimplementare la gestione del focus.

setCustomValidity sovrascrive i messaggi

I messaggi predefiniti ("Compili questo campo") potrebbero non corrispondere al tono desiderato. input.setCustomValidity("Username is required") sostituisce il messaggio predefinito con il testo specificato. L'input viene considerato non valido finché il messaggio non viene eliminato.

Cancellare i messaggi personalizzati

input.setCustomValidity("") rimuove il messaggio personalizzato e riattiva la validazione normale. Lo richiami ogni volta che esegue una nuova validazione; in caso contrario, i messaggi personalizzati obsoleti rimangono anche dopo che l'utente ha risolto il problema.

input.addEventListener("input", () => {
  if (input.value.length < 3) {
    input.setCustomValidity("Must be at least 3 characters");
  } else {
    input.setCustomValidity("");
  }
});

Validazione asincrona

Per i controlli lato server (unicità del nome utente, validità del coupon), usi setCustomValidity dopo la risposta asincrona: const ok = await checkUsername(value); input.setCustomValidity(ok ? "" : "Already taken");. Il browser rileva immediatamente il nuovo stato di validità.

Abbinare un'interfaccia personalizzata per gli errori

Per usare una propria visualizzazione degli errori mantenendo il tracciamento della validità, ascolti l'evento invalid e chiami e.preventDefault() per sopprimere il tooltip nativo: input.addEventListener("invalid", (e) => { e.preventDefault(); showError(input, input.validationMessage); }).

Più vincoli personalizzati

setCustomValidity supporta un solo messaggio personalizzato alla volta. Per applicare diverse regole, le verifichi tutte e chiami setCustomValidity con il messaggio più rilevante, seguendo un ordine di priorità. Viene visualizzata la prima regola che non è stata rispettata.

Non sovrapporre la validazione integrata

Se imposta un messaggio personalizzato per un campo required vuoto, il suo messaggio e quello predefinito potrebbero entrare in conflitto. Scelga un solo approccio per ogni campo: disabiliti il vincolo integrato (usi type="text" invece di type="email" e convalidi tramite setCustomValidity) oppure si affidi completamente alla validazione integrata.

Validazione personalizzata a livello di modulo

Per la validazione tra campi (ad esempio, per verificare che la conferma della password corrisponda), applichi setCustomValidity al campo correlato: confirmInput.setCustomValidity(confirmInput.value === passInput.value ? "" : "Passwords do not match"). Il modulo rimane non valido finché i due valori non coincidono.

Internazionalizzazione

I messaggi integrati vengono localizzati dal browser in base alla lingua dell'utente. I messaggi personalizzati impostati tramite setCustomValidity devono essere forniti da lei nella lingua corretta: legga navigator.language o il proprio stato i18n e fornisca la traduzione corrispondente.

Test

Apra DevTools e provi ogni percorso di errore: invio con campo vuoto, input parziale, formato non corrispondente, errore asincrono. Verifichi che venga mostrato il messaggio corretto, che la sua risoluzione lo rimuova e che l'invio di un modulo valido prosegua. I casi limite (incollare un formato non valido, compilazione automatica del browser) meritano test specifici.

Verifica delle conoscenze

Dopo aver chiamato input.setCustomValidity("Already taken"), come si comunica al browser che l'input è di nuovo valido?

Riepilogo

reportValidity attiva l'interfaccia di validazione integrata del browser (focus e tooltip), risultando ideale per i controlli programmatici. setCustomValidity sovrascrive i messaggi predefiniti con il testo desiderato: lo cancelli con una stringa vuota quando il campo torna valido. Ascolti l'evento invalid con preventDefault per visualizzare gli errori in modo completamente personalizzato. Lo usi per la validazione tra campi, i controlli asincroni e i messaggi personalizzati localizzati.

Domande Frequenti

La lezione «reportValidity e setCustomValidity» è gratuita?

Sì — il testo completo di «reportValidity e setCustomValidity» è 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 «reportValidity e setCustomValidity»?

Attivare l’interfaccia di convalida del browser e impostare messaggi di errore personalizzati 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 «reportValidity e setCustomValidity»?

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. La FormData API
  2. La Constraint Validation API
  3. reportValidity e setCustomValidity
  4. Eventi di reset dei moduli e gestione dello stato
← Torna a HTML Academy