When a form is submitted, user agents must act as if they used the following algorithm. First, each element in that form's elements list is added to a temporary list (note that the elements list is defined to be in document order). Then, each element in this list whose willValidate DOM attribute is true is checked for validity, and an invalid event must be fired on each element that, when checked, is found to fail to comply with its constraints (i.e. each element whose validity.valid DOM attribute is false) and is still a member of the form after the event has been handled.

1. Some fields are required

2. If any fields is completed (valid) all others are required too

3. If any fields is completed (not empty) all others are required too

4. At least one field should be completed (valid)

5. At least one field should be completed (not empty)