Walidowanie formularzy nie zawsze jest prostym zadaniem – najczęściej wyłączamy domyślną walidację i piszemy bardzo customowy kod. Okazuje się jednak, że JS ma wbudowane Constraint Validation API a także umożliwia prostą zmianę domyślnych tekstów które pokazywane są użytkownikowi podczas domyślnej walidacji formularza.
Walidowanie formularzy
Baza pod przykłady
Bazą będzie formularz HTML zawierający pola różnego typu:
W jaki sposób natomiast stworzymy wiadomości? Bazując na interfejsie ValidityState, dzięki któremu każdy input zawiera informację o błędach walidacji:
Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
const getCustomValidity = input =>{
const validity = input.validity;
const name = input.name.charAt(0).toUpperCase() + input.name.slice(1);
if(validity.valueMissing){
return`${name} is needed for account`;
}
if(validity.tooShort){
return`Please provide at least ${input.minLength} characters for ${name}`;
}
if(validity.tooLong){
return`Please provide at most ${input.maxLength} characters for ${name}`;
}
if(validity.rangeUnderflow){
return`Please provide value which is at least ${input.min} for ${name}`;
}
if(validity.rangeOverflow){
return`Please provide value which is at most ${input.max} for ${name}`;
}
if(validity.typeMismatch){
if(input.type === 'email'){
return`Please provide a valid email - copy it from your mailbox`;
}
if(input.type === 'url'){
`Please provide a valid url - copy it from browser address bar`;
}
}
return'';
}
const getCustomValidity = input => {
const validity = input.validity;
const name = input.name.charAt(0).toUpperCase() + input.name.slice(1);
if (validity.valueMissing) {
return `${name} is needed for account`;
}
if (validity.tooShort) {
return `Please provide at least ${input.minLength} characters for ${name}`;
}
if (validity.tooLong) {
return `Please provide at most ${input.maxLength} characters for ${name}`;
}
if (validity.rangeUnderflow) {
return `Please provide value which is at least ${input.min} for ${name}`;
}
if (validity.rangeOverflow) {
return `Please provide value which is at most ${input.max} for ${name}`;
}
if (validity.typeMismatch) {
if (input.type === 'email') {
return `Please provide a valid email - copy it from your mailbox`;
}
if (input.type === 'url') {
`Please provide a valid url - copy it from browser address bar`;
}
}
return '';
}
const getCustomValidity = input => {
const validity = input.validity;
const name = input.name.charAt(0).toUpperCase() + input.name.slice(1);
if (validity.valueMissing) {
return `${name} is needed for account`;
}
if (validity.tooShort) {
return `Please provide at least ${input.minLength} characters for ${name}`;
}
if (validity.tooLong) {
return `Please provide at most ${input.maxLength} characters for ${name}`;
}
if (validity.rangeUnderflow) {
return `Please provide value which is at least ${input.min} for ${name}`;
}
if (validity.rangeOverflow) {
return `Please provide value which is at most ${input.max} for ${name}`;
}
if (validity.typeMismatch) {
if (input.type === 'email') {
return `Please provide a valid email - copy it from your mailbox`;
}
if (input.type === 'url') {
`Please provide a valid url - copy it from browser address bar`;
}
}
return '';
}
Dzięki temu, przykładowo jeśli podamy tylko jeden znak gdy wymagane są co najmniej dwa, pojawi się zdefiniowana przez nas wiadomość:
Customowy sposób prezentacji rezultatów walidacji
Co jednak, jeśli nie odpowiada nam natywna walidacja? Możemy wyłączyć ją dodając atrybut
novalidate
novalidate na formularzu. W takiej sytuacji walidować musimy ręcznie, np. w reakcji na wysłanie formularza. Do walidacji możemy reużyć sposobu z poprzedniego paragrafu bazującego na
Walidując formularze nie zawsze musimy polegać na frameworkach czy bibliotekach – wbudowane w JS mechanizmy potrafią całkiem sporo i warto je znać oraz stosować.
Jeden komentarz do “Sprawdź jak walidować formularze w czystym JS!”
Jeden komentarz do “Sprawdź jak walidować formularze w czystym JS!”
Możliwość komentowania została wyłączona.