Как реализовать Select с поиском
Проект C# asp net core. Использую jQuery v3.5.1 и BootStrap 4.
Есть Select:
<div class="form-group">
<label asp-for="HouseId" class="control-label"></label>
<select id="HouseId" asp-for="HouseId" class="form-control" asp-items="ViewBag.GetHouses"></select>
</div>
Нужно сделать поиск для данного Select, чтобы при его активации можно было не крутить, а начать вводить и отображались подходящие варианты. Реализовать нужно на фронте.
На просторах интернета нашел следующий вариант:
<link rel="stylesheet" href="/selectize/dist/css/selectize.default.css">
<script src="/jquery.min.js"></script>
<script src="/microplugin/src/microplugin.js"></script>
<script src="/sifter/sifter.min.js"></script>
<script src="/selectize/dist/js/selectize.min.js"></script>
<script>
$(document).ready(function(){
$('.js-selectize').selectize();
});
</script>
Скачал с https://github.com/selectize/selectize.js библиотеку, закинул папку "dist" в свой проект и прописал на своей странице:
<script src="~/lib/jquery/dist/jquery.min.js"></script>
<link rel="stylesheet" href="~/lib/selectize/dist/css/selectize.bootstrap4.css">
<script src="~/lib/selectize/dist/js/selectize.min.js"></script>
Далее установил node.js и попытался установить через npm 2 оставшихся плагина:
npm install microplugin
npm install sifter
Вроде установились, но в проекте я их у себя найти не могу. И следовательно путь к ним у себя на странице прописать тоже не могу:
<script src=".../.../microplugin.js"></script>
<script src=".../sifter.min.js"></script>
Подскажите реализацию с использованием jQuery без сторонних плагинов, если это возможно.
Если реализация только с использованием стандартных инструментов не возможна, подскажите как мне правильно установить и прописать библиотеки microplugin.js и sifter.min.js, чтобы они заработали.
По совету @teran рассмотрел вариант jquery UI autocomplete по данной ссылке (https://jqueryui.com/autocomplete/#default).
Первая проблема возникла с импортом зависимостей:
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>jQuery UI Autocomplete - Default functionality</title>
<link rel="stylesheet" href="//code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css">
<link rel="stylesheet" href="/resources/demos/style.css">
<script src="https://code.jquery.com/jquery-1.12.4.js"></script>
<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
<script>
Выдавало следующие ошибки:
GET http://localhost:18246/resources/demos/style.css net::ERR_ABORTED 404 (Not Found) jquery.min.js:2 jQuery.Deferred exception: availableTags is not defined ReferenceError: availableTags is not defined at HTMLDocument. (http://localhost:18246/Friends/Create:342:25) at e (http://localhost:18246/lib/jquery/dist/jquery.min.js:2:30005) at t (http://localhost:18246/lib/jquery/dist/jquery.min.js:2:30307) undefined
В проекте у меня jQuery находится и подключается следующим образом:
<script src="~/lib/jquery/dist/jquery.min.js"></script>
если правильно понял, в нем не хватает библиотек.
Потом нашел другой вариант подключения:
<meta charset="utf-8">
<title>jQuery UI</title>
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
<script src="//ajax.aspnetcdn.com/ajax/jquery.ui/1.10.3/jquery-ui.min.js"></script>
<link rel="stylesheet" href="http://ajax.aspnetcdn.com/ajax/jquery.ui/1.10.3/themes/sunny/jquery-ui.css">
<script src="~/lib/jquery/dist/jquery.min.js"></script>
Данный вариант вроде прошел без ошибок.
Не понятно как прикрутить autocomplete к Select. Select заполняется контроллером на сервере:
public class FriendsController : Controller
{
[HttpGet]
public IActionResult Create()
{
int selectedIndexCity = 1;
ViewData["CityId"] = new SelectList(_context.City, "IdCity", "Name", selectedIndexCity);
ViewData["DistrictId"] = new SelectList(_context.District, "IdDistrict", "Name");
ViewData["FieldActivityId"] = new SelectList(_context.Fieldactivity, "IdFieldActivity", "Name");
ViewData["GroupUId"] = new SelectList(_context.Groupu, "IdGroup", "Name");
ViewData["MicroDistrictId"] = new SelectList(_context.Microdistrict, "IdMicroDistrict", "Name");
ViewData["StreetId"] = new SelectList(_context.Street.Where(s => s.CityId==1), "IdStreet", "Name");
//ViewData["HouseId"] = new SelectList(_context.House, "IdHouse", "Name");
SelectList houses= new SelectList(_context.House, "IdHouse", "Name");
ViewBag.GetHouses = houses;
ViewData["PollingStationId"] = new SelectList(_context.PollingStation, "IdPollingStation", "Name");
ViewData["UserId"] = new SelectList(_context.User, "IdUser", "FamilyName");
return View();
}
}