#javascript
#javascript
Вопрос:
На моей странице есть несколько вариантов выбора, и я установил одну и ту же функцию onchange для всех меню выбора следующим образом:
<select onchange="myResultsFunction()">
<option></option>
<option></option>
</select>
Всякий раз, когда выбранное значение любого из выпадающих списков выбора изменяется, оно должно отображать обновленный список значений в определенном div, например:
<div id="selected-results">
<ul>
<li></li>
<li></li>
<li></li>
</ul>
</div>
Итак, мне нужна помощь с фактической функцией, потому что я не знаю, как идти дальше. Моя функция начинается с получения идентификатора div, в котором я хочу отобразить неупорядоченный список результатов. Но как мне идти дальше? Потому что я предполагаю, что мне нужно вывести его с помощью цикла или чего-то еще, чтобы я мог создать список результатов? И как мне на самом деле получить выбранное значение в выпадающих списках?
function myResultsFunction() {
document.getElementByID("selected-results");
}
Комментарии:
1. Я бы добавил класс ко всему вашему выбору, чтобы выбрать их все и сопоставить их, чтобы получить их значения.
Ответ №1:
var selects = document.querySelectorAll("select.custom_component_option_select");
// get all selelct elements with class .custom_component_option_select
var list = document.querySelector("#selected-results > ul");
//get list, ul element
selects.forEach(select => {
//for each select element
select.addEventListener('change', event => {
// add event Listener change
myResultsFunction()
// on change call function
})
})
function myResultsFunction() {
list.innerHTML = "";
// on change empty the list
selects.forEach(select => {
// for each select
if ((select.options[select.selectedIndex].text !== "...") === true) {
// if selcted value is not ... , feel free to edit his
var li = document.createElement("li");
// creat new li
li.innerHTML = select.options[select.selectedIndex].text;
// add value to it
list.appendChild(li);
// add to list
}
})
}
<select class="custom_component_option_select">
<option selected value="test">...</option>
<option value="test">1-1</option>
<option value="test">1-2</option>
</select>
<select class="custom_component_option_select">
<option selected value="test">...</option>
<option value="test">2-1</option>
<option value="test">2-2</option>
</select>
<select class="custom_component_option_select">
<option selected>...</option>
<option value="test">3-1</option>
<option value="test">3-2</option>
</select>
<div id="selected-results">
<ul>
</ul>
</div>
Комментарии:
1. @Shtarley Перед вами рабочее решение. Это работает так, как я это сделал. И вам ни для чего не нужны циклы. Это можно сделать, зациклив все выбранные значения элементов и сопоставив их, и создавая каждый раз новый список с самого начала. Это более простой и простой способ, которым я это сделал. Перед вами фрагмент рабочего решения с полным объяснением того, как это работает в описании.
2. @Shtarley Внимательно посмотрите на сниппет, сравните его с вашим кодом. Проверьте свою консоль. журнал ошибок java-скрипта. боюсь, что «похоже, не работает» для меня ничего не значит. Это работает так, как вы видите перед собой. Вам нужно дать мне что-то для работы, какую-то ошибку или полный рабочий код, чтобы сравнить его…
3. @Shtarley Это вообще не упоминалось, сейчас я обновлю функцию. Сколько у вас выборок? и есть ли у них какие-то идентификаторы, классы?
4. @Shtarley Что это за класс? И да, в этом случае мы создадим цикл…
5. @Shtarley Я немного изменил код и добавил к нему комментарии, теперь я спешу выйти, но все должно быть ясно из комментариев в коде. Сделайте мне массаж, я могу настроить его позже, приветствия.