I have an HTML select element:
<select id='poetslist'>
<option value="shakespeare">William Shakespeare</option>
<option value="milton">John Milton</option>
<option value="keats">John Keats</option>
<option value="wordsworth">William Wordsworth</option>
<option value="larkin">Phillip Larkin</option>
</select>
In Chrome, when the page loads, the William Shakespeare
option is selected. If the user starts typing 'Phil', the list focusses itself on Phillip Larkin
. Familiar behaviour.
What I'd like to do (preferably using jQuery) is also allow the user to type the initials of the poet and have the relevant option come into focus.
So if you typed JK
, then the John Keats
option should come into focus. JM
and John Milton, etc.
I don't even know how the HTML select element works, whether it's different in different browsers, etc - and it seems to be hard to find good documentation for this.
Can anyone figure out a smart way to do this in jQuery?
The basic magic you need is to set the property "selected" on one of the options. Give each one an ID. Then use
See also this SO question.
Now, for the selection behavior, you probably need to intercept the key pressed events and do your own logic. The trickiest part is probably figuring out what to do for odd cases, like what happens when someone type "JKM" -- Keats or Milton?
Here is a complete solution:
.data()
.HTML
Javascript
With @Charlie's answer in mind, if you have access to build the html in the first place, it might be easiest to add an extra attribute to the option element, like
If you can't do this on the server-end, jQuery could easily insert an extra attribute to an option based on it's value. Assuming, of course, that you know in advance each of the values you'll have in there.
After getting the extra attribute into the option, it would just be a matter of checking those values on keyup of the search box.