JavaScript form validation: improve on 'good, but not good enough'
Separation of Concerns
So I agree with rolfl, but I also want to expand a bit, and provide some small bit of skeleton code for you to go on.  When I do validation on the client, I usually set up variables for errors, conditions, and dependencies.  This allows me to use a simple handling structure that can be used if needed (as @rolfl suggested), and ignored if not, that way you aren't validating fields that don't need validation, or if they do, you're only performing exactly as much validation as needed.
This simple &quot;boilerplate&quot; that I've just created will also allow you to inject functionality to any of your variables by adding objects to your arrays.  As long as your validate function executes the conditions and dependencies injected, you should have a very nice reusable client validation boilerplate.
Then, you just attach an event listener to whatever form element you want to validate, and run a validate function on that callback.  It'll efficiently go through conditions that exist on elements, instead of the other way around, and you can be as flexible you want with your view code without tying it to your validation function.
One of the key principles of coding is Separation of Concerns.  Any of your code that performs app logic (the validation) shouldn't have any sort of view code in it if at all possible.  I believe this is the biggest single concept that would have made the difference in the feedback you received . If you maintain SOC in this case, no matter how the form changes, your validate function won't have to change, or will be at least very flexible, and if you all of a sudden needed to use the same form but on a mobile page, you could just change the renderErrors function to alter your view code to fit the new display without changing anything else.
That's what I would consider great.  See my fiddle: http://jsfiddle.net/LongLiveCHIEF/sqwYT/
I'll update it a bit, but wanted to give you a head start on my line of thought.