TL; DR: Non ti interessa i vecchi browser? Usa form.reportValidity()
.
Hai bisogno del supporto del browser legacy? Continuare a leggere.
In realtà è possibile attivare manualmente la convalida.
Userò JavaScript normale nella mia risposta per migliorare la riusabilità, non è necessario jQuery.
Supponi il seguente modulo HTML:
<form>
<input required>
<button type="button">Trigger validation</button>
</form>
E prendiamo i nostri elementi dell'interfaccia utente in JavaScript:
var form = document.querySelector('form')
var triggerButton = document.querySelector('button')
Non hai bisogno del supporto per i browser legacy come Internet Explorer? Questo è per te.
Tutti i browser moderni supportano il reportValidity()
metodo sugli form
elementi.
triggerButton.onclick = function () {
form.reportValidity()
}
Ecco fatto, abbiamo finito. Inoltre, ecco un semplice CodePen che utilizza questo approccio.
Approccio per i browser meno recenti
Di seguito è riportata una spiegazione dettagliata di come reportValidity()
può essere emulato nei browser meno recenti.
Tuttavia, non è necessario copiare e incollare questi blocchi di codice nel progetto da soli: è disponibile un ponyfill / polyfill prontamente disponibile per te.
Dove reportValidity()
non è supportato, dobbiamo ingannare un po 'il browser. Allora, cosa faremo?
- Verificare la validità del modulo chiamando
form.checkValidity()
. Questo ci dirà se il modulo è valido, ma non mostrerà l'interfaccia utente di convalida.
- Se il modulo non è valido, creiamo un pulsante di invio temporaneo e attiviamo un clic su di esso. Poiché il modulo non è valido, sappiamo che non verrà effettivamente inviato, tuttavia mostrerà suggerimenti di convalida all'utente. Rimuoveremo immediatamente il pulsante di invio temporaneo, quindi non sarà mai visibile all'utente.
- Se il modulo è valido, non è necessario interferire affatto e lasciare che l'utente proceda.
In codice:
triggerButton.onclick = function () {
// Form is invalid!
if (!form.checkValidity()) {
// Create the temporary button, click and remove it
var tmpSubmit = document.createElement('button')
form.appendChild(tmpSubmit)
tmpSubmit.click()
form.removeChild(tmpSubmit)
} else {
// Form is valid, let the user proceed or do whatever we need to
}
}
Questo codice funzionerà praticamente in qualsiasi browser comune (l'ho testato con successo fino a IE11).
Ecco un esempio di CodePen funzionante.