Why do we use the novalidate attribute in HTML?

The novalidate attribute in HTML is a Boolean attribute that disables the browser's built-in form validation when a form is submitted. When applied to a <form> element, it allows users to submit forms even if required fields are empty or contain invalid data according to HTML5 validation rules.

This attribute is particularly useful when you want to implement custom client-side validation using JavaScript, save form progress for later completion, or handle validation entirely on the server side.

Syntax

Following is the syntax for the novalidate attribute −

<form novalidate>
   <!-- form elements -->
</form>

As a Boolean attribute, novalidate can be written in several ways −

<form novalidate>
<form novalidate="">
<form novalidate="novalidate">

How HTML5 Form Validation Works

By default, HTML5 provides built-in validation for form elements with attributes like required, type="email", pattern, min, max, and others. When a form is submitted, the browser automatically checks these constraints and prevents submission if validation fails, displaying error messages to the user.

The novalidate attribute bypasses this automatic validation, allowing the form to be submitted regardless of validation errors.

Form Validation Behavior Without novalidate ? Validates on submit ? Shows error messages ? Prevents submission ? Built-in browser UI ? User must fix errors With novalidate ? Skips validation ? No error messages ? Allows submission ? Custom validation ? Server-side handling

Form Without novalidate (Default Behavior)

Following example shows the default HTML5 validation behavior −

<!DOCTYPE html>
<html>
<head>
   <title>Default Form Validation</title>
</head>
<body style="font-family: Arial, sans-serif; padding: 20px;">
   <h2>Student Registration (With Validation)</h2>
   <form action="" method="post">
      <label for="email">Email:</label><br>
      <input type="email" id="email" name="email" required><br><br>
      
      <label for="age">Age:</label><br>
      <input type="number" id="age" name="age" min="18" max="100" required><br><br>
      
      <input type="submit" value="Submit">
   </form>
   <p><small>Try submitting without filling fields or with invalid data.</small></p>
</body>
</html>

In this form, the browser will show validation errors if you try to submit with empty required fields, invalid email format, or age outside the specified range.

Form With novalidate Attribute

Following example demonstrates the same form with novalidate attribute −

<!DOCTYPE html>
<html>
<head>
   <title>Form with novalidate</title>
</head>
<body style="font-family: Arial, sans-serif; padding: 20px;">
   <h2>Student Registration (No Validation)</h2>
   <form action="" method="post" novalidate>
      <label for="email">Email:</label><br>
      <input type="email" id="email" name="email" required><br><br>
      
      <label for="age">Age:</label><br>
      <input type="number" id="age" name="age" min="18" max="100" required><br><br>
      
      <input type="submit" value="Submit">
   </form>
   <p><small>This form will submit even with empty or invalid data.</small></p>
</body>
</html>

With the novalidate attribute, this form will submit even if the email field is empty, contains invalid email format, or the age is outside the specified range.

Using novalidate with Custom JavaScript Validation

A common use case for novalidate is to implement custom validation logic using JavaScript −

<!DOCTYPE html>
<html>
<head>
   <title>Custom Validation with novalidate</title>
   <style>
      .error { color: red; font-size: 12px; }
      .success { color: green; }
   </style>
</head>
<body style="font-family: Arial, sans-serif; padding: 20px;">
   <h2>Custom Validation Example</h2>
   <form id="customForm" novalidate>
      <label for="username">Username (min 5 characters):</label><br>
      <input type="text" id="username" name="username">
      <span id="usernameError" class="error"></span><br><br>
      
      <label for="password">Password:</label><br>
      <input type="password" id="password" name="password">
      <span id="passwordError" class="error"></span><br><br>
      
      <button type="submit">Submit</button>
   </form>
   <div id="result"></div>

   <script>
      document.getElementById('customForm').addEventListener('submit', function(e) {
         e.preventDefault();
         
         const username = document.getElementById('username').value;
         const password = document.getElementById('password').value;
         let isValid = true;
         
         // Clear previous errors
         document.getElementById('usernameError').textContent = '';
         document.getElementById('passwordError').textContent = '';
         document.getElementById('result').textContent = '';
         
         // Custom validation
         if (username.length < 5) {
            document.getElementById('usernameError').textContent = 'Username must be at least 5 characters';
            isValid = false;
         }
         
         if (password.length < 8) {
            document.getElementById('passwordError').textContent = 'Password must be at least 8 characters';
            isValid = false;
         }
         
         if (isValid) {
            document.getElementById('result').innerHTML = '<p class="success">Form submitted successfully!</p>';
         }
      });
   </script>
</body>
</html>

In this example, the novalidate attribute prevents browser validation, allowing the custom JavaScript to handle all validation logic and display custom error messages.

Common Use Cases

Following are the main scenarios where novalidate is useful −

  • Draft Saving − Allow users to save incomplete forms as drafts without validation errors.

  • Custom Validation − Implement complex validation rules using JavaScript that go beyond HTML5 capabilities.

  • Server-Side Validation Only − When validation logic exists entirely on the server side.

  • Progressive Enhancement − Build forms that work without JavaScript but provide enhanced validation when available.

  • Multi-Step Forms − Allow progression through form steps without validating incomplete sections.

Browser Compatibility

The novalidate attribute is well-supported across all modern browsers. In browsers that don't support HTML5 form validation, the attribute has no effect since there's no validation to disable.

Browser Support
Chrome Yes (all versions)
Firefox Yes (4.0+)
Safari Yes (5.0+)
Edge Yes (all versions)
Internet Explorer Yes (10+)

Conclusion

The novalidate attribute is a powerful tool for disabling HTML5's built-in form validation. It's particularly valuable when implementing custom validation logic, allowing draft saves, or handling validation entirely on the server side. While useful, remember that disabling client-side validation means you must ensure proper validation occurs elsewhere in your application flow.

Updated on: 2026-03-16T21:38:53+05:30

6K+ Views

Kickstart Your Career

Get certified by completing the course

Get Started
Advertisements