Introduction
When creating web forms, ensuring that users provide valid inputs is crucial. By default, browsers handle form validation using generic messages like "Please fill out this field." However, customizing these messages can improve the user experience by providing clearer instructions or context-specific feedback. This tutorial explores how to set custom validation messages for HTML forms using HTML5 and JavaScript.
Understanding Form Validation
HTML5 introduced built-in form validation attributes such as required
, minlength
, maxlength
, etc., which automatically validate form inputs based on specified criteria without any additional scripting. However, the default error messages generated by these validations may not always suit your application’s needs. By leveraging HTML5’s Constraint Validation API and JavaScript event handlers, you can customize these messages to better guide users.
The Constraint Validation API
The Constraint Validation API provides a suite of methods and properties that allow developers to control form validation behavior:
setCustomValidity(message)
: Sets a custom validity message for the input element. If called with an empty string, it clears any existing custom message.checkValidity()
: Checks if the element’s value is valid according to its constraints.reportValidity()
: Displays the validation messages and returnsfalse
if there are validation errors.
Custom Validation Messages
To customize validation messages, we’ll primarily use the setCustomValidity()
method in conjunction with event handlers like oninvalid
and oninput
.
Example: Customizing Required Field Messages
Consider a simple login form where you want to display custom error messages for required fields:
<form id="form" onsubmit="return(login())">
<label>
Username:
<input name="username" placeholder="Username" required
oninvalid="this.setCustomValidity('This field cannot be left blank')"
oninput="this.setCustomValidity('')" />
</label>
<br/>
<label>
Password:
<input name="pass" type="password" placeholder="Password" required
oninvalid="this.setCustomValidity('Password is mandatory')"
oninput="this.setCustomValidity('')" />
</label>
<br/>
Remember me:
<input type="checkbox" name="remember" value="true" />
<br/>
<input type="submit" name="submit" value="Log In"/>
</form>
How It Works
-
oninvalid
Event Handler: This event triggers when a user attempts to submit the form while the input is invalid. We usesetCustomValidity()
here to set our custom error message. -
oninput
Event Handler: Resets the custom validity message whenever the user modifies the input. This ensures that once corrected, the field no longer shows the custom error message.
Best Practices
- Always reset the custom validity message in an
oninput
event handler to avoid persistent error messages after corrections. - Consider accessibility by ensuring your custom messages are clear and informative for all users, including those using assistive technologies.
Advanced Customization with JavaScript
For scenarios involving multiple form fields or more complex validations, you can use JavaScript to iterate over input elements and set up validation logic dynamically:
document.addEventListener("DOMContentLoaded", function() {
var inputs = document.querySelectorAll('input[required]');
inputs.forEach(function(input) {
input.oninvalid = function(e) {
e.target.setCustomValidity('');
if (!e.target.validity.valid) {
e.target.setCustomValidity('This field is required and cannot be left blank.');
}
};
input.oninput = function() {
e.target.setCustomValidity('');
};
});
});
Conclusion
Customizing validation messages in HTML forms enhances user experience by providing clear, contextual feedback. By using the Constraint Validation API along with event handlers like oninvalid
and oninput
, developers can create more user-friendly web applications.