Creating autocomplete dropdowns with the HTML5 datalist element.
Jul 02, 2025 pm 04:38 PMThe key to creating an autocomplete drop-down box using HTML5's datalist element is to correctly associate <input> and <datalist>. 1. The basic structure is: set the list attribute for <input> and match the id of <datalist>; 2. The supported input types include text, search, number, range, date, etc., but non-text types may have poor compatibility on the mobile side; 3. The options can be dynamically populated through JavaScript, but performance optimization needs to be paid attention to; 4. Mainstream browsers have good support, and old devices can consider polyfill or custom solutions instead.
Creating an automatic completion drop-down box with HTML5 datalist
elements is actually quite simple, and it doesn't require writing too much JavaScript. It can achieve suggestions like search box by binding <input>
and <datalist></datalist>
. The key is correct structure and matching attributes.

How to write the basic structure?
To use datalist
, you need a <input>
element and a <datalist></datalist>
, and then associate them with list
attribute.

<input type="text" list="fruits" /> <datalist id="fruits"> <option value="Apple"></option> <option value="Banana"></option> <option value="Cherry"></option> <option value="Orange"></option> </datalist>
-
list
attribute value on<input>
must be consistent withid
of<datalist>
. -
value
of each<option>
is the suggestion item that the user can choose. - No additional scripts are required, browser native support.
What input types are supported?
<datalist>
can be used with a variety of <input>
types, common including:
-
text
-
search
-
number
-
range
-
date
For example, if you want the user to choose a year, you can write it like this:

<input type="number" list="years" /> <datalist id="years"> <option>2020</option> <option>2021</option> <option>2022</option> <option>2023</option> </datalist>
Note: Some browsers may have slightly less compatibility with non-text types, especially on mobile.
How to load options dynamically? (Simple method)
Although datalist
itself does not provide the ability to remotely load data, you can dynamically populate the content of <datalist>
with JavaScript.
For example, suppose you have an array:
const fruits = ['Apple', 'Banana', 'Cherry', 'Orange']; const dataList = document.getElementById('fruits'); fruits.forEach(fruit => { const option = document.createElement('option'); option.value = fruit; dataList.appendChild(option); });
This allows you to dynamically generate a list of suggestions based on user input or other conditions.
But be aware of:
- Don't load too much data at once, otherwise it will affect performance
- If the data volume is large, consider paging or fuzzy matching optimization
How about browser compatibility?
Mainstream modern browsers support datalist
, including Chrome, Edge, Firefox and Safari. But there may be problems on some older versions or mobile devices.
If you find that pull-down suggestions are not displayed on some devices, you can consider:
- Use polyfill library simulation function
- Fall back to a custom autocomplete component (for example, implement it with input ul)
However, for most projects, directly using datalist
is enough, especially suitable for quickly implementing basic functions.
Basically that's it. With a clear structure and good attribute correspondence, you can quickly create an available automatic completion drop-down box.
The above is the detailed content of Creating autocomplete dropdowns with the HTML5 datalist element.. For more information, please follow other related articles on the PHP Chinese website!

Hot AI Tools

Undress AI Tool
Undress images for free

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Clothoff.io
AI clothes remover

Video Face Swap
Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Article

Hot Tools

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

Hot Topics

MicrodataenhancesSEOandcontentdisplayinsearchresultsbyembeddingstructureddataintoHTML.1)Useitemscope,itemtype,anditempropattributestoaddsemanticmeaning.2)ApplyMicrodatatokeycontentlikebooksorproductsforrichsnippets.3)BalanceusagetoavoidclutteringHTML

MicrodatasignificantlyimprovesSEObyenhancingsearchengineunderstandingandrankingofwebpages.1)ItaddssemanticmeaningtoHTML,aidingbetterindexing.2)Itenablesrichsnippets,increasingclick-throughrates.3)UsecorrectSchema.orgvocabularyandkeepitupdated.4)Valid

When using HTML5SSE, the methods to deal with reconnection and errors include: 1. Understand the default reconnection mechanism. EventSource retrys 3 seconds after the connection is interrupted by default. You can customize the interval through the retry field; 2. Listen to the error event to deal with connection failure or parsing errors, distinguish error types and execute corresponding logic, such as network problems relying on automatic reconnection, server errors manually delay reconnection, and authentication failure refresh token; 3. Actively control the reconnection logic, such as manually closing and rebuilding the connection, setting the maximum number of retry times, combining navigator.onLine to judge network status to optimize the retry strategy. These measures can improve application stability and user experience.

HTML5introducedkeyfeaturesthattransformedwebdevelopment.1.Semanticelementslike,,andimprovedstructure,readability,andaccessibility.2.Nativemultimediasupportviaandtagseliminatedrelianceonplugins.3.Enhancedformcontrolsincludingtype="email"andr

Yes,HTML5inputtypesimproveaccessibilitybyprovidingsemanticmeaningtoassistivetechnologies.1)Emailinputtypeoptimizeskeyboarddisplayandscreenreaderannouncements.2)Dateinputtypeoffersacalendarwidget,aidinguserswithmotordisabilitiesandensuringconsistentda

HTML5, CSS and JavaScript should be efficiently combined with semantic tags, reasonable loading order and decoupling design. 1. Use HTML5 semantic tags, such as improving structural clarity and maintainability, which is conducive to SEO and barrier-free access; 2. CSS should be placed in, use external files and split by module to avoid inline styles and delayed loading problems; 3. JavaScript is recommended to be introduced in front, and use defer or async to load asynchronously to avoid blocking rendering; 4. Reduce strong dependence between the three, drive behavior through data-* attributes and class name control status, and improve collaboration efficiency through unified naming specifications. These methods can effectively optimize page performance and collaborate with teams.

To control HTML5 video and audio playback using JavaScript, master the following key operations to achieve basic control. 1. Start or pause play can be achieved through the .play() and .pause() methods, and it is recommended to trigger through user interaction to be compatible with mobile browsers; 2. Control the volume and set the value from 0 to 1 through the volume attribute, and switch by setting the muted attribute to true or false; 3. Jump to a specific time to play, you can use the currentTime attribute, which supports direct assignment or increase or decrease the current time, and it is recommended to add error handling; 4. Listen to the playback status changes can be achieved through events such as play, pause, ended and timeupdate.

Server-SentEvents (SSE) is a lightweight solution provided by HTML5 to push real-time updates to the browser. It realizes one-way communication through long HTTP connections, which is suitable for stock market, notifications and other scenarios. Create EventSource instance and listen for messages when using: consteventSource=newEventSource('/stream'); eventSource.onmessage=function(event){console.log('Received message:',event.data);}; The server needs to set Content-Type to text/event
