Creating a select box with a search option
Solution 1
This simple code worked for me
<input list="brow">
<datalist id="brow">
<option value="Internet Explorer">
<option value="Firefox">
<option value="Chrome">
<option value="Opera">
<option value="Safari">
</datalist>
Incase you need to use only select tag use Selectize Js. It has all options we require .Please Try It Demo using Selectize Js
Solution 2
Selectize Js has all options we require .Please Try It
$(document).ready(function () {
$('select').selectize({
sortField: 'text'
});
});
<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/selectize.js/0.12.6/js/standalone/selectize.min.js" integrity="sha256-+C0A5Ilqmu4QcSPxrlGpaZxJ04VjsRjKu+G82kl5UJk=" crossorigin="anonymous"></script>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/selectize.js/0.12.6/css/selectize.bootstrap3.min.css" integrity="sha256-ze/OEYGcFbPRmvCnrSeKbRTtjG4vGLHXgOqsyLFTRjg=" crossorigin="anonymous" />
</head>
<body>
<select id="select-state" placeholder="Pick a state...">
<option value="">Select a state...</option>
<option value="AL">Alabama</option>
<option value="AK">Alaska</option>
<option value="AZ">Arizona</option>
<option value="AR">Arkansas</option>
<option value="CA">California</option>
<option value="CO">Colorado</option>
<option value="CT">Connecticut</option>
<option value="DE">Delaware</option>
<option value="DC">District of Columbia</option>
<option value="FL">Florida</option>
<option value="GA">Georgia</option>
<option value="HI">Hawaii</option>
<option value="ID">Idaho</option>
<option value="IL">Illinois</option>
<option value="IN">Indiana</option>
</select>
</body>
</html>
Solution 3
Select2 http://select2.github.io may be even better and more active than Chosen.
See this comparison: http://sitepoint.com/jquery-select-box-components-chosen-vs-select2
I went for Select2 (a few months ago) because Chosen had an issue when using Chinese characters via an IME http://github.com/harvesthq/chosen/issues/2663 It works great.
Solution 4
Full option searchable select box
This also supports Control buttons keyboards such as ArrowDown
ArrowUp
and Enter
keys
function filterFunction(that, event) {
let container, input, filter, li, input_val;
container = $(that).closest(".searchable");
input_val = container.find("input").val().toUpperCase();
if (["ArrowDown", "ArrowUp", "Enter"].indexOf(event.key) != -1) {
keyControl(event, container)
} else {
li = container.find("ul li");
li.each(function (i, obj) {
if ($(this).text().toUpperCase().indexOf(input_val) > -1) {
$(this).show();
} else {
$(this).hide();
}
});
container.find("ul li").removeClass("selected");
setTimeout(function () {
container.find("ul li:visible").first().addClass("selected");
}, 100)
}
}
function keyControl(e, container) {
if (e.key == "ArrowDown") {
if (container.find("ul li").hasClass("selected")) {
if (container.find("ul li:visible").index(container.find("ul li.selected")) + 1 < container.find("ul li:visible").length) {
container.find("ul li.selected").removeClass("selected").nextAll().not('[style*="display: none"]').first().addClass("selected");
}
} else {
container.find("ul li:first-child").addClass("selected");
}
} else if (e.key == "ArrowUp") {
if (container.find("ul li:visible").index(container.find("ul li.selected")) > 0) {
container.find("ul li.selected").removeClass("selected").prevAll().not('[style*="display: none"]').first().addClass("selected");
}
} else if (e.key == "Enter") {
container.find("input").val(container.find("ul li.selected").text()).blur();
onSelect(container.find("ul li.selected").text())
}
container.find("ul li.selected")[0].scrollIntoView({
behavior: "smooth",
});
}
function onSelect(val) {
alert(val)
}
$(".searchable input").focus(function () {
$(this).closest(".searchable").find("ul").show();
$(this).closest(".searchable").find("ul li").show();
});
$(".searchable input").blur(function () {
let that = this;
setTimeout(function () {
$(that).closest(".searchable").find("ul").hide();
}, 300);
});
$(document).on('click', '.searchable ul li', function () {
$(this).closest(".searchable").find("input").val($(this).text()).blur();
onSelect($(this).text())
});
$(".searchable ul li").hover(function () {
$(this).closest(".searchable").find("ul li.selected").removeClass("selected");
$(this).addClass("selected");
});
div.searchable {
width: 300px;
float: left;
margin: 0 15px;
}
.searchable input {
width: 100%;
height: 50px;
font-size: 18px;
padding: 10px;
-webkit-box-sizing: border-box; /* Safari/Chrome, other WebKit */
-moz-box-sizing: border-box; /* Firefox, other Gecko */
box-sizing: border-box; /* Opera/IE 8+ */
display: block;
font-weight: 400;
line-height: 1.6;
color: #495057;
background-color: #fff;
background-clip: padding-box;
border: 1px solid #ced4da;
border-radius: .25rem;
transition: border-color .15s ease-in-out, box-shadow .15s ease-in-out;
background: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3E%3Cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3E%3C/svg%3E") no-repeat right .75rem center/8px 10px;
}
.searchable ul {
display: none;
list-style-type: none;
background-color: #fff;
border-radius: 0 0 5px 5px;
border: 1px solid #add8e6;
border-top: none;
max-height: 180px;
margin: 0;
overflow-y: scroll;
overflow-x: hidden;
padding: 0;
}
.searchable ul li {
padding: 7px 9px;
border-bottom: 1px solid #e1e1e1;
cursor: pointer;
color: #6e6e6e;
}
.searchable ul li.selected {
background-color: #e8e8e8;
color: #333;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="searchable">
<input type="text" placeholder="search countries" onkeyup="filterFunction(this,event)">
<ul>
<li>Algeria</li>
<li>Bulgaria</li>
<li>Canada</li>
<li>Egypt</li>
<li>Fiji</li>
<li>India</li>
<li>Japan</li>
<li>Iran (Islamic Republic of)</li>
<li>Lao People's Democratic Republic</li>
<li>Micronesia (Federated States of)</li>
<li>Nicaragua</li>
<li>Senegal</li>
<li>Tajikistan</li>
<li>Yemen</li>
</ul>
</div>
Solution 5
You can use select2 . it is the best js for this job.
https://select2.org/dropdown
$(document).ready(function () {
//change selectboxes to selectize mode to be searchable
$("select").select2();
});
<html>
<head>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<link href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/select2.min.css" rel="stylesheet" />
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/js/select2.min.js"></script>
</head>
<body>
<select id="select_page" style="width:200px;" class="operator">
<option value="">Select a Page...</option>
<option value="alpha">alpha</option>
<option value="beta">beta</option>
<option value="theta">theta</option>
<option value="omega">omega</option>
</select>
</body>
</html>
SBB
Updated on July 05, 2022Comments
-
SBB almost 2 years
I am trying to replicate what you can see here in this image.
I want to be able to either type in the text field above the box or just click on the option directly.
What would be the best way to go about that? Is there anything bootstrap related that exists already?
-
Javid about 7 yearsI totally agree with you. Not only it supports all languages, but also the container is not relatively positioned, which means it's compatible with any theme. I tried Chosen and because of a stupid
position:relative
parent it failed to work. -
szymeo about 6 yearsNot really by jQuery, mostly by extension named chosen.js
-
user2288580 about 5 yearsI found a link on the W3C web site:w3schools.com/howto/tryit.asp?filename=tryhow_js_filter_list
-
Rami Alloush over 4 yearsBest answer! exactly what I was looking for without changing my original code. Thanks :)
-
James Mazikowski over 4 yearsAs of Safari 12.1, released 2019-03-25, now supports the
datalist
tag. en.wikipedia.org/wiki/Safari_version_history#Safari_12 -
James Bond about 4 yearsThis uses select instead of input datalist, so it loses the search functionality
-
Jahanzeb Nawaz almost 4 years@JamesBond im not sure if you checked the example link .. but this provides the search and select functionality. :) BTW i was in search something like this. got multiple choices now to select. THANKS
-
HomeIsWhereThePcIs almost 4 yearsThis allows the user to type in anything, not just the options provided. Also requires double click to open the dropdown list.
-
Hemanth Palle almost 4 years@HomeIsWhereThePcIs - Yes , In that case , I suggest SelectJs, I am using it in my appplications & its great.
-
Kehlin Swain over 3 yearsIs there a way to upon selecting the right option there results can be posted
-
Aaron Cicali about 3 years@HomeIsWhereThePcIs - To be fair, if it didn't allow you to type in anything, it'd become a game of "guess the next correct letter that matches something in the list". In that scenario, I don't believe the user would understand why the keys they're typing do not display in the input. It would actually seem very broken.
-
Oscar almost 3 yearsIs this feature HTML 5? because u didnt need Jquery
-
MVnD3X almost 3 yearsThanks for the answer, Worked like a charm for me. Cheers !!!
-
Gabriel Seles over 2 yearsThank you!!!!!!!!!!
-
Ciprian about 2 yearsAny chance for a Vanilla JavaScript solution for the code above?