Как сделать выпадающий список в input , кроме datalist
Сделал поиск с выпадающим списком datalist , но этот список никак нельзя стилизовать , нужен другой вариант
<input type="text" list="" placeholder="Города" class="city-filter" id="cityfield" autocomplete="off" data-list="cityfields">
<datalist id="cityfields">
<option class="label" >москва</option>
<option class="label" >питер</option>
<option class="label" >омск</option>
<option class="label" >минск</option>
<option class="label" >мадрид</option>
<option class="label" >казань</option>
</datalist>
Ответы (1 шт):
Автор решения: Daniil Loban
→ Ссылка
Наверно лучше использовать из какой-нибудь библиотеки, но если хочется заморочится со своим велосипедом, можно начать по такому принципу (совсем без js не выйдет) и тут нету поиска по найденному но его легко можно реализовать имея весь список городов. С таймаутами нужно играть чтобы выяснить минимум по значению.
const dropInput = document.querySelector('input.drop');
const dropList = document.querySelector('ul.drop');
dropInput.addEventListener('focus', show, false);
dropInput.addEventListener('blur', hide, false);
dropList.addEventListener('click', dropSelect, false);
function hide(){
setTimeout(() =>
dropList.classList.remove('visible'),
300);
}
function show(){
setTimeout(() =>
dropList.classList.add('visible'),
300);
}
function dropSelect(e) {
dropInput.value = e.target.textContent
hide();
}
ul.drop {
display:none;
list-style-type: none;
padding-left: 0;
border: 1px solid #ddd;
margin-top: 0;
width:210px;
}
li {
margin: 2px;
}
li:hover {
background: yellow;
}
ul.drop.visible {
display:block;
}
<input class="drop" type="text">
<ul class="drop">
<li>москва</li>
<li>воронеж</li>
<li>париж</li>
</ul>