DEV Community

Kurapati Mahesh
Kurapati Mahesh

Posted on • Edited on

HTML: select vs datalist

select

-> Creates drop down list
-> Doesn't filter items rather highlights the matching text
-> By default first option gets selected and populated as selected value
-> User can only select from a given list
-> User can make any option selected by default using selected attribute
-> To get selected value: document.getElementById('select#id').value;
-> We can apply onchange on select tag.
-> select by default display:inline-block
-> Option label populated and shown as option

datalist

-> Specifies list of predefined options for an input element
-> Shows only filtered items as soon as user start typing in text box
-> Doesn't select any option by default.
-> User can choose from list or enter his own item.
-> We have to assign value attribute to pre-populate data in input
-> To get selected value: document.getElementById('input#id').value;
-> We can apply onchange on input element
-> Datalist by default display: none
-> Option value only populated in data list

select with examples

-> Creates drop down list

 <label for="cars">Select a car: </label> <select id="cars" name="cars"> <option value="volvo">VOLVO</option> <option value="bmw">BMW</option> <option value="audi">AUDI</option> <option value="lamborghini">LAMBORGHINI</option> </select> 
Enter fullscreen mode Exit fullscreen mode

Image description

Image description

-> Doesn't filter items rather highlights the matching text. Type in 'B' incase of our example and observe that BMW gets highlighted.
Image description

-> By default first option gets selected and populated as selected value
Image description

-> User can only select from given list
We can't type in any characters as it is not an input box. Hence only option is to select from given list.

-> User can make any option selected by default using selected attribute

 <label for="cars">Select a car: </label> <select id="cars" name="cars"> <option value="volvo">VOLVO</option> <option value="bmw" selected>BMW</option> <option value="audi">AUDI</option> <option value="lamborghini">LAMBORGHINI</option> </select> 
Enter fullscreen mode Exit fullscreen mode

Image description

-> To get selected value: document.getElementById('select#id').value;

 document.getElementById('cars').value; > bmw 
Enter fullscreen mode Exit fullscreen mode

-> We can apply onchange on select tag.

 <label for="cars">Select a car: </label> <select id="cars" name="cars" onchange="optionChanged(event)"> <option value="volvo">VOLVO</option> <option value="bmw" selected>BMW</option> <option value="audi">AUDI</option> <option value="lamborghini">LAMBORGHINI</option> </select> <script> function optionChanged(event) { console.log(event.target.value); } </script> 
Enter fullscreen mode Exit fullscreen mode

-> select by default display:inline-block
Image description

-> option label populated and shown as option
value is 'volvo' and its label is VOLVO. All the cars labels are displayed in dropdown.

Image description

Datalist with examples:

-> specifies list of predefined options for input element

 <label for="car">Select a car: </label> <input list="cars" name="cars" id="car"> <datalist id="cars"> <option value="volvo"> <option value="bmw"> <option value="audi"> <option value="lamborghini"> </datalist> 
Enter fullscreen mode Exit fullscreen mode

Image description

Image description

-> Shows only filtered items as soon as user start typing in text box
Image description

-> Doesn't select any option by default.
Image description

-> User can choose from list or enter his own item.
Image description

-> We have to assign value attribute to pre-populate data in input

 <label for="cars">Select a car: </label> <input list="car" name="car" id="cars" value="audi"> <datalist id="car"> <option value="volvo"> <option value="bmw"> <option value="audi"> <option value="lamborghini"> </datalist> 
Enter fullscreen mode Exit fullscreen mode

Image description

-> to get selected value: document.getElementById('input#id').value;

 document.getElementById('cars').value; 
Enter fullscreen mode Exit fullscreen mode

-> we can apply onchange on input element

 <label for="cars">Select a car: </label> <input list="car" name="car" id="cars" onchange="optionChanged(event)"> <datalist id="car"> <option value="volvo"> <option value="bmw"> <option value="audi"> <option value="lamborghini"> </datalist> <script> function optionChanged(event) { console.log(event.target.value); } </script> 
Enter fullscreen mode Exit fullscreen mode

-> datalist by default display: none
Image description

-> option value only populated in data list We only provided values for each option element and not the labels. Also, same are populated.

 <label for="car">Select a car: </label> <input list="cars" name="cars" id="car"> <datalist id="cars"> <option value="volvo"> <option value="bmw"> <option value="audi"> <option value="lamborghini"> </datalist> 
Enter fullscreen mode Exit fullscreen mode

Image description

Thanks.

Point any further differences.

Follow: https://twitter.com/urstrulyvishwak

Top comments (0)