Steven, The country example was just an example; I'm aware there are nicer ways to do country selection. I'm actually most interested in autocompleting from much larger sets, such as a voter file with thousands of records. I want the user to type a name, but get back the internal ID used to access that voter's information. For now, I'm doing what the CCK people are doing with their nodereference code. It's a bit of a hack (you append the $nid at the end of the string like this: Autocomplete Widget: This Is The Title Of My Node [NID] The submit code parses off the NID and throws the rest away. My Voter ID example would work the same way. The non-JavaScript code for this sort of thing embeds a look-up form where the AC widget would be. This is ugly, but the advantage of autocompleting is so great in this case that it's worth the effort. Some AJAX frameworks have a "combo-box" object that does exactly what I want to do here. I suspect there's some way to do this with JQuery, but since I'm just getting started with it, I'm open to suggests how this would work. Thanks, Rob Steven Wittens wrote:
An example of the type of widget I'd want would be a "Country Selection" widget where what I really want is the two-character country code (US, CA, GB, FR, and so on), but I want the user to think of typing "United States", "Canada", "Great Britain", "France" or so on in order to get the popup to get set on this code.
Why do you need to submit the country code through the form? If the autocomplete is smart enough to change "Canada" into ".ca", then the code that processes the form can do so too.
Various requests have been made top make the autocomplete 'smarter', by letting the displayed value be different from the submitted value. Usually, this is an abuse of the autocompleter that would be better solved by custom code, and it doesn't degrade without JavaScript at all.
As far as subclassing autocomplete, the menu scout module does something like this. But I would only do it if you need significantly different behaviour.
Here's how I would do it: - Make the text field always take a country name. It is the most user-friendly input format. - When the user types something, it does an ajax request to the server to look up the country and its code. If it is found, it is returned in a list that shows "Country (country code)" e.g. "Belgium (be)". Clicking a suggestion will fill in "Belgium", not "be". - When the user submits the form, the field value (country name) is compared to the database and the first match is used. - If nothing matches, a validation error is thrown. This applies both to JS and non-JS, as you can still type in random crap.
For JS users, they get a nice, user-friendly direct autocomplete. Non-JS users just have to wait for the whole form to submit instead, but still get completion and validation.
To really spice it up, you can use a suffix unit on the autocomplete field to display the country's flag, when found.
Steven Wittens