16.11.2021, 11:21
|
Новичок на форуме
|
|
Регистрация: 16.11.2021
Сообщений: 4
|
|
Как получить value 1 элемента option в списке select?
Добрый день. Есть список select из динамически заполняющимися элементами option. К этому списку добавлен поиск, путем получения массива элементов, его фильтрации и возврата нового массива, который удовлетворяем условиям. Все хорошо, но есть одно НО, если в списке остается 1 элемент подскажите как получить его value?
Т.е если в поиске ввести "ха" в списке будет только Харьков, вот тут нужно получить его value чтоб на основе этого подгрузить улицы города.
Буду очень благодарен за помощь
https://codepen.io/Copermaine/pen/dyzQOEN?editors=1011
<input autofocus type="text" id="select_filter" placeholder="Введи текст для поиска" />
<select name="select" id="select_region" class="geo_select">
<option value="" hidden>Оберіть регіон</option>
<option value="1" >Харьков</option>
<option value="2" >Хмельницк</option>
<option value="3" >Хмарцизк</option>
</select>
const regionSelect = document.getElementById('select_region');
const regionFilter = document.getElementById('select_filter');
const optionsArray = [...regionSelect.options];
regionFilter.oninput = function(e) {
const val = this.value.trim();
const regexp = new RegExp(val, "ig");
regionSelect.options.length = 0;
optionsArray.forEach(elem =>{
if (elem.innerText.search(regexp) !== -1){
regionSelect.appendChild(elem);
}
})
};
Последний раз редактировалось Copermaine, 16.11.2021 в 11:45.
|
|
16.11.2021, 11:35
|
|
Профессор
|
|
Регистрация: 03.02.2020
Сообщений: 2,750
|
|
regionSelect.options[0].value
|
|
16.11.2021, 11:44
|
Новичок на форуме
|
|
Регистрация: 16.11.2021
Сообщений: 4
|
|
Сообщение от voraa
|
regionSelect.options[0].value
|
Это работает даже если в списке остаются 3 элемента, значение получаем первого в массиве, а мне нужно получить значение того, который выбран, как по onchange, но с учетом того что он 1 остался и onchange тут не срабатывает))
|
|
16.11.2021, 14:22
|
|
Профессор
|
|
Регистрация: 03.02.2020
Сообщений: 2,750
|
|
А в какой момент надо получать
Можно проверять, что он 1 при вводе букв.
(Кстати, если случайно ввести не букву, а, например [ вместо х, то будет ошибка в регулярном выражении)
Если при щелчке по селекту, то можно на click.
regionSelect.options[regionSelect.selectedIndex].value
|
|
16.11.2021, 15:52
|
Новичок на форуме
|
|
Регистрация: 16.11.2021
Сообщений: 4
|
|
Давайте расскажу что в целом должно быть, а вы мне возможно подскажите какой-то другой вариант решения.
Мне нужно реализовать поиск пока по городам, но далее он также будет и по улицам. Есть массив городов которые принадлежат области, и есть улицы принадлежащие конкретному городу.
Улиц у города будет много, и скролить не вариант, поэтому решили добавить поиск.
Исходя из этого я выбрал конструкцию select-option так как она дает возможность каждому option присвоить текст и value, по которому отрисовывается следующая ступень, я создаю option и заполняю его данными из масcиива при помощи js далее заполняю этими option select в HTML ну и вижу список на страничке. Вот при поиске для того чтоб мне отрисовать следующую ступень принадлежности, нужно получить value выбранного элемента, а в моей реализации я его получить не могу))) Т.е мне нужно значение получить когда я кликаю по option если он один отобразился в select.
|
|
16.11.2021, 17:47
|
|
Профессор
|
|
Регистрация: 03.02.2020
Сообщений: 2,750
|
|
Какой то натянутый интерфейс.
Если вам нужен только тогда, когда 1, то зачем кликать? Это лишнее действие. Просто при поиске проверяйте количество найденных и берите его, если остался только один. Да и зачем тогда селект. Просто в списке искать и показывать, когда один остался.
А почему только один?
Допустим осталось в селекте 3 или 5 или 10, и человек видит то, что ему нужно, почему он не может кликнуть по нужному и не вводить дальше.
В любом случае событие 'click' даст нужный элемент
<body>
<input autofocus type="text" id="select_filter" placeholder="Введи текст для поиска" />
<select name="select" id="select_region" class="geo_select">
<option value="" hidden>Оберіть регіон</option>
<option value="1" >Харьков</option>
<option value="2" >Хмельницк</option>
<option value="3" >Хмарцизк</option>
</select>
<script>
const regionSelect = document.getElementById('select_region');
const regionFilter = document.getElementById('select_filter');
const optionsArray = [...regionSelect.options];
regionFilter.oninput = function(e) {
const val = this.value.trim();
const regexp = new RegExp(val, "ig");
regionSelect.options.length = 0;
optionsArray.forEach(elem =>{
if (elem.innerText.search(regexp) !== -1){
regionSelect.appendChild(elem);
}
})
};
regionSelect.addEventListener('click', () => {
console.log (regionSelect.options[regionSelect.selectedIndex].value)
})
</script>
</body>
|
|
16.11.2021, 17:54
|
|
Профессор
|
|
Регистрация: 03.02.2020
Сообщений: 2,750
|
|
Можно еще рассмотреть использование элемента <datalist>
|
|
16.11.2021, 18:11
|
Новичок на форуме
|
|
Регистрация: 16.11.2021
Сообщений: 4
|
|
Если в селекте остается больше 1 оптиона, то ту без проблем срабатывает onchange, а когда один нет изменения, onchange не работает.
Событие по клику работает, но не полностью, предположил пользователь в инпут ввел 'хар' а дальше кликать по селекту не хочет.
<datalist> пробую.
|
|
16.11.2021, 18:27
|
|
Профессор
|
|
Регистрация: 03.02.2020
Сообщений: 2,750
|
|
Сообщение от Copermaine
|
предположил пользователь в инпут ввел 'хар' а дальше кликать по селекту не хочет.
|
Но это вы должны продумать интерфейс. Что происходит, когда пользователь что то делает или не делает.
Это вы должны продумать должен ли пользователь кликать, если остался только один элемент.
|
|
|
|