When is it appropriate to 'auto advance' from one text field to the next, as in phone numbers and SSN?
Because this behavior is rare and therefore unexpected, it will surprise most novice users, which can cause them to misunderstand how to use the interface, and interfere with usability.
(An example of this interference might be if the user fills out the field and presses tab, while you have auto-advanced, and while they think they are typing in the next field, they discover that they are actually typing in the field after the next field).
However if you have very experienced users who use your form every day, they will grow accustomed to this behavior and appreciate the shortcut.
So I would say
don't do it if your users only occasionally use this form, for example, if this is the sign up form of your web site.
consider it only if your users visit this page again and again, for example, if you are providing a user interface for call-center agents to enter data which they enter many times a day.
With one of my previous assignments, this issue came up with our users. It turned out frustrating for both beginner and advanced users. Here are some major issues with auto-advancing:
Not everyone looks at the screen while typing. They may not realize that they are in a new field and will type erroneous values. This happens even to people who are aware that the fields will auto-advance.
Knowing when to advance to the next field is quite tricky. Almost always, the advanced user will know better than you that he should advance to the next field. While the process of manually advancing to the next field will educate new users about when a field is complete. Advanced users will become quite comfortable with the tab key.
This is an implementation issue/bug, but quite common, the programmer will have code that indicates that the focus should move, but the user wants to edit/append-to the previous field. The auto-advance mechanism often gets in the way, frustrating the user.
With these in mind, I can't think of many benefits to auto-advancing fields. Just make sure your tab order is appropriate and it should be ok.
Very often we are trying to make it easier for the user to solve a problem for us, when really we should be solving the problem ourselves.
In this case, the auto advance technique is used to make it easier for users to fill in multiple form fields, but why not make it easiest of all and skip the multiple form fields entirely? In the case of a phone number, for example, why not just have one form field for all numbers and then separate them programmatically on the backend if needed?
This simplifies the task for the user, which is better than trying to make a more complex task easier.
See this take on why Mint beat Wesabe (it's a little broad as it relates to this subject but is definitely relevant) for an example of this principle in action: Mint focused on doing everything for the user so they didn't have to do it themselves:
Mint focused on making the user do almost no work at all, by automatically editing and categorizing their data, reducing the number of fields in their signup form, and giving them immediate gratification as soon as they possibly could...
Excellent answers on whether you should use the common auto-advance has already been written. Instead, I'll propose a bit of an alternative to the regular auto-advance.
Instead of sending the user to the next field automatically after having typed in the mandatory 6 letters in the field (or whatever), you should keep the cursor in the first field. Only when a new key is pressed, the cursor should be moved to the next field, unless that key is backspace.
- If a user doesn't know the form uses auto-advance, they can press TAB as per usual.
- If the user assumes auto-advance is on, this will also work as expected the moment a key is pressed.
- Contrary to regular auto-advance, if a user mistypes the last letter, he isn't forced to manually go back to the prvious field; the cursor is still there.
- The user might get confused when the cursor is blinking in one field, and the very moment a key is pressed, the letter appears in another field where the cursor has also been moved to.