In the semantic point-of-view, I believe that this method is very clean and…appropriate. This is how forms should be, IMHO.
- Cross browser validation
- Deals with all sorts of edge cases
- Utilize new HTML5 types for unsupported browsers
- Flexible error messaging system