• Как сделать список одного select зависимым от выбора в другом?

    @RomulFobos Автор вопроса
    Вообщем получилось сделать следующим образом. На страницу в контроллере добавляю атрибуты со списков всех отделов и всех услуг. В скрипте, вытаскиваю id отдела и затем по списку услуг сравниваю поле id_Отдела услуги с ранее выбранным id. Если совпадает, то добавляю его в select.
    Сложность была, в том, что я не знаю JS и плохо знаю возможности thymeleaf.
    Всем спасибо за помощь!
    html код
    <div class="col-sm-6">
                <label for="inputService" class="form-label">Выбранная структурное подразделение</label>
                <select class="form-select" name="inputDepartment" id="inputDepartment" required oninput="testFunction()">
                    <option selected disabled value="">Выберите структурное подразделение</option>
                    <option th:each="el : ${allDepartments}" th:value="${el.id}" th:text="${el.name}"></option>
                </select>
            </div>
            <div class="col-sm-6">
                <label for="inputService" class="form-label">Выбранная услуга</label>
                <select class="form-select" name="inputService" id="inputService" required disabled>
                    <option selected disabled value="">Выберите услугу</option>
                    <option></option>
                </select>


    Сам скрипт
    < script th: inline = "javascript" > function testFunction() {
     	document.getElementById("inputService").removeAttribute("disabled");
     	/*<![CDATA[*/
     	var departments = [];
     	var size = 1 + /*[[${arrayListDepartments.get(arrayListDepartments.size()-1).getId()}]]*/ ;
     	for (var i = 0; i < size; i++) {
     		departments.push("0");
     	}
     	/*[# th:each="elVar : ${arrayListDepartments}"]*/
     	var index = /*[[${elVar.id}]]*/ ;
     	departments[index] = /*[[${elVar.name}]]*/
     		/*[/]*/
     		/*]]>*/
     		var x = document.getElementById("inputDepartment").value;
     	var service = [];
     	/*[# th:each="elServ : ${allServices}"]*/
     	var index_S = /*[[${elServ.department.id}]]*/
     		if (x == index_S) {
     			var var_arr = [];
     			var_arr.push( /*[[${elServ.serviceName}]]*/ , /*[[${elServ.id}]]*/ );
     			service.push(var_arr);
     		}
     	/*[/]*/
     	inputService.options.length = 1;
     	for (var i = 0; i < service.length; i++) {
     		let newOption = new Option(service[i][0], service[i][1], );
     		inputService.append(newOption);
     	}
     } < /script>
    Ответ написан
    Комментировать