TL;DR: Don't disable the submit button and wait to present errors until after the user has hit the submit button.
Studies have been conducted showing that users tend to complete forms in full before fixing errors, regardless of error presentation.
One such study looked at how users reacted to different error presentations: Usable error message presentation in the World Wide Web: Do not show errors right away, Interacting with Computers, Volume 19, pages 330-341 (2007)
Six types of error presentation were looked at:
- Immediate, inline to the fields, showing errors one by one.
- Immediate, in a dialog, showing errors one by one.
- After submit, inline to the fields, showing errors one by one.
- After submit, inline to the fields, showing errors all at once.
- After submit, in a dialog, showing errors one by one.
- After submit, in a dialog, showing errors all at once.
What they found is called out in this research article: Working towards Usable Forms on the World Wide Web: Optimizing Date Entry Input Fields
Bargas-Avila et al. [24] compared six different ways of presenting an error message, including inline validation, pop-up windows, and embedded error messages. People made fewer consecutive errors when error messages appeared embedded in the form next to the corresponding input fields or one by one in a pop-up window. This was only the case if the error messages showed up at the end after clicking the send button. If the error messages appeared at the moment the erroneous field was left (inline validation), the participants made significantly more errors completing the form. They simply ignored or, in the case of pop-up windows, even clicked away the appearing error messages without reading them.
To break it down a little more:
- Users have two modes: completion & revision mode
- Users will tend to ignore immediate errors when filling out the form
- The most effective error presentations were:
- After submit, inline to the fields, showing errors all at once.
- After submit, inline to the fields, showing errors one by one.
- After submit, in a dialog, showing errors one by one.
To apply this to your situation:
Don’t ever disable the submit button and only show validation errors after the user hits submit.
... is the correct course of action.
Presenting error immediately inline can, according to the above, distract the user and take them out of the task of completing the form. Allow the user to finish their "completion" mode and then present errors after they hit submit.