HTML5 Datalist is a new html tag shipped with HTML5 specification. HTML5 Datalist can be used to create a simple poor man’s Autocomplete feature for a webpage.
In this tutorial we will go through the basics of HTML5 Datalist tag and check some quick examples of autocomplete.
Introduction to HTML5 Datalist tag
As part of HTML5 specification a new tag <datalist> has been introduced. Using this tag, we can define a list of data which then can be used as list for an input box. We can create a simple Autocomplete feature using this tag.
Consider a textbox to take country name input from user.
So we created a list of countries using <datalist> tag. The id of datalist tag must match with the list attribute of the input box.
Below is the demo. Enter some text in the Country textbox and see how an autocomplete list appears below it.
Not every browser out there supports html5 datalist for now. So far IE 10 and above, Firefox, Chrome and Opera 19 above supports html5 datalist tag. Safari doesn’t support datalist yet :(
This might change in future. Check the latest compatibility matrix for HTML5 Datalist here http://caniuse.com/#search=datalist.
Backward Compatibility for HTML5 Datalist tag
As seen in above compatibility table, not all browser supports html5 datalist tag. If you are using datalist, the older browser will simply ignores the datalist tag and renders rest of the webpage. The textbox which is linked to datalist will remain just a textbox. No autocomplete will be added. Internet explorer 9 and below has unique way of parsing datalist. If you try to check above example in IE 9 or below you will see all the option values are simply printed on the page. To avoid this we can wrap the options in datalist tag with a select tag. For example:
This can give user option to select from the list if autocomplete is not available. Check below screenshot.
Here we simple let user enter the country name or they can select from the country list box. This way users have an option to select from the list if they want to.
This can be simply achieve by adding a select tag inside datalist and make it as if it’s a select box.
Here we simply wrapped all options within select tag. The name of select tag must be same as that of textbox. So when the form is submitted the appropriate value is passed to server-side code.
There is a better way of adding datalist compatibility to browsers that aren’t yet supporting this feature. We call it Polyfills. It is a way to fallback functionality to older browsers.
Chris Coyier has written a nice library that polyfills the datalist capabilities into older/non-supportive browsers.
All we need to do is to check if our browser supports datalist of not. If not then simply includes the polyfill js library. Check out below example.
<!DOCTYPE html><html><head><scriptsrc="http://cdnjs.cloudflare.com/ajax/libs/modernizr/2.7.1/modernizr.min.js"></script><script>// Safari reports success of list attribute, so doing ghetto detection instead
test : (!Modernizr.input.list || (parseInt($.browser.version) > 400)),
yep : [
</script></head><body><inputtype="text"list="countries"name="mycountry" /><datalistid="countries"><optionvalue="India">India</option><optionvalue="United States">United States</option><optionvalue="United Kingdom">United Kingdom</option><optionvalue="Germany">Germany</option><optionvalue="France">France</option></datalist></body></html>