There's no need to copy any images and, especially if your style-sheets are gzip-compressed, there will be next to no impact on load times. The main problem is that if the user doesn't enter a new value, the placeholder text will be submitted along with the form.
The option of using pure HTML, sometimes with a touch of CSS, to complement Java Script form validation was until recently unthinkable.
Sure there have been all kinds of whacky plug-ins over the years aimed at achieving this, but never a single standard that we could work towards.
As shown above, once you've added HTML5 attributes to your form elements, they can be easily styled using CSS so that each input field is clearly marked as valid or invalid. If you want something more restrictive you can add a 'pattern' attribute. thx Safari doesn't display any HTML5 validation messages, but it may prevent the form from submitting if any "required" fields are left blank. The red/green symbols are applied using CSS and do work in Safari, but are only an indication of whether the input for that field is valid.
input field: This solution is still more complicated than it needs to be as it requires two extra images to be loaded. You forgot the most important part: by having these standard types to identify the fields, browsers can provide helpful autofill interfaces.
In other web browsers they can be used in combination with the .
Obviously neither example is very limiting, but it will prevent people from entering completely wrong values, such as phone number, strings with multiple '@'s or spaces.
For the browser-impaired, this is how the required input field will appear in Safari with either the image or the elements, but won't work for checkboxes, select elements, etc. github.com/jamesallardice/The "tel" type seems to only affect the input keyboard for i OS and perhaps similar devices.
For those you might want to place the valid/invalid markers alongside the element or format the input elements themselves using borders, background colours, etc. The "date" input AFAIK has only been implemented in Opera, but hopefully some day there will be cross-browser support for all the new types.
Before you ask, and someone always does, these examples will currently work in the following browsers: Safari 5, Chrome 6, Opera 9, Firefox 4 Beta and the i Phone/i Pad.
Also each browser has a slightly different default behaviour.
While it would be great to see something like this in every browser, for now you probably need to stick with the ubiquitous Java Script plugins. Arjen, You're correct: and it's not just the plus sign ( ), although I have to admit, I've never seen that used in an email address before.