Создание многоуровневого выпадающего списка с возможностью множественного выбора в веб-приложении можно реализовать с помощью HTML, CSS и JavaScript. Для примера я покажу, как это можно сделать с использованием HTML для структуры, CSS для оформления и JavaScript для логики работы.
### Структура HTML
Для начала создадим выпадающие списки для зубов и диагнозов:
```html
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Многоуровневый выпадающий список</title>
<style>
.hidden { display: none; }
</style>
</head>
<body>
<div>
<label for="tooth-select">Выберите зуб:</label>
<select id="tooth-select" multiple>
<option value="tooth1">Зуб1</option>
<option value="tooth2">Зуб2</option>
<option value="tooth3">Зуб3</option>
<option value="tooth4">Зуб4</option>
<option value="tooth5">Зуб5</option>
</select>
</div>
<div>
<label for="diagnosis-select">Выберите диагноз:</label>
<select id="diagnosis-select" multiple class="hidden">
<option value="pulpitis">Пулпит</option>
<option value="caries">Кариес</option>
<option value="fluorosis">Флюороз</option>
<option value="hypersensitivity">Гиперестезия</option>
<option value="periodontitis">Периодонтит</option>
</select>
</div>
<button id="submit-button">Отправить</button>
<div id="result"></div>
<script src="script.js"></script>
</body>
</html>
```
### Логика JavaScript
Теперь добавим логику для отображения диагнозов в зависимости от выбранного зуба и для обработки выбора:
```javascript
document.addEventListener("DOMContentLoaded", function() {
const toothSelect = document.getElementById("tooth-select");
const diagnosisSelect = document.getElementById("diagnosis-select");
const submitButton = document.getElementById("submit-button");
const resultDiv = document.getElementById("result");
// Словарь для хранения диагнозов по зубам
const toothDiagnoses = {
'tooth1': ['Пулпит', 'Кариес'],
'tooth2': ['Флюороз', 'Гиперестезия'],
'tooth3': ['Периодонтит'],
'tooth4': ['Кариес', 'Флюороз', 'Гиперестезия'],
'tooth5': ['Пулпит', 'Периодонтит'],
};
toothSelect.addEventListener('change', function() {
diagnosisSelect.innerHTML = ""; // Очистить предыдущие опции
const selectedTooths = Array.from(toothSelect.selectedOptions).map(option => option.value);
if (selectedTooths.length > 0) {
diagnosisSelect.classList.remove("hidden");
// Добавляем диагнозы для выбранных зубов
const diagnosesToShow = new Set(); // Используем Set для уникальности
selectedTooths.forEach(tooth => {
const diagnoses = toothDiagnoses[tooth] || [];
diagnoses.forEach(diagnosis => diagnosesToShow.add(diagnosis));
});
// Заполним список диагнозов
diagnosesToShow.forEach(diagnosis => {
const option = document.createElement('option');
option.value = diagnosis;
option.textContent = diagnosis;
diagnosisSelect.appendChild(option);
});
} else {
diagnosisSelect.classList.add("hidden");
}
});
submitButton.addEventListener('click', function() {
const selectedTooths = Array.from(toothSelect.selectedOptions).map(option => option.text);
const selectedDiagnoses = Array.from(diagnosisSelect.selectedOptions).map(option => option.text);
resultDiv.innerHTML = `
<h3>Вы выбрали:</h3>
<p>Зубы: ${selectedTooths.join(', ')}</p>
<p>Диагнозы: ${selectedDiagnoses.join(', ')}</p>
`;
});
});
```
### Описание кода
1. **HTML**: