Несколько раскрывающихся списков? - PullRequest
0 голосов
/ 13 июля 2020
• 1000 континентов, когда вы выбираете континент, открывается новое окно с запросом «Страна», затем вы выбираете страну, и открывается новое выпадающее окно для выбора штата.

Я использовал этот шаблон

<script type="text/javascript">
    function CheckDepartment(val){
     var element=document.getElementById('othercolor');
     if(val=='others')
       element.style.display='block';
     else
       element.style.display='none';}
    function CheckOption(val){
        var element=document.getElementById('misc')
        if(val=='misc')
            element.style.display='block';
        else
            element.style.display='block';
    }

    </script>
    </head>
    <body>
      <select name="color" onchange='CheckDepartment(this.value);'>
        <option>pick a color</option>
        <option value="red">RED</option>
        <option value="blue">BLUE</option>
        <option value="others">others</option>
      </select>
    <select name="othercolor" id="othercolor" onchange='CheckOption(this.value)' style='display:none;'/>
    <option value=""></option>
    <option value="hi">hi</option>
    <option value="misc" id="misc" >misc</option>
</select>
    <select name="third" style='display:none;'>
        <option value=""></option>
        <option value="first">first</option>
        <option value="second">second</option>

    </select>

, но я не могу открыть третий раскрывающийся блок при выборе варианта из второго раскрывающегося окна.

edit: третье поле. Думаю, я удалил свою последнюю попытку, так что это было своего рода воссозданием того, что я вспомнил. Я также невероятно новичок во всем этом и не знаю, имеет ли смысл то, что я пробовал.

1 Ответ

0 голосов
/ 13 июля 2020

Вот упрощенная демонстрация. (Предполагается, что только значение «да» должно вызывать отображение следующего зависимого раскрывающегося списка.)

const
  select1 = document.getElementById("select1"),
  select2 = document.getElementById("select2");

document.addEventListener("change", handleDropdownDisplay);

function handleDropdownDisplay(event) {
  let changedElement = event.target;
  if ((changedElement != select1) && (changedElement != select2)) {
    return;
  }
  if (changedElement.value == "yes") {
    changedElement.parentElement.nextElementSibling.classList.remove("hidden");
  } else {
    changedElement.parentElement.nextElementSibling.classList.add("hidden");
  }
}
div {
  margin-bottom: 0.5em;
}

.hidden {
  display: none;
}
<div>
  <label for="select1">Show level 2?</label>
  <select id="select1">
    <option value="no">No</option>
    <option value="yes">Yes</option>
  </select>
</div>

<div class="hidden">
  <label for="select2">Show level 3?</label>
  <select id="select2">
    <option value="no">No</option>
    <option value="yes">Yes</option>
  </select>
</div>

<div class="hidden">
  <label for="select3">Would your rather</label>
  <select id="select3">
    <option value="brains">Eat monkey brains</option>
    <option value="vba">Write code in VBA</option>
  </select>
</div>

(Кстати, уровень 3 не становится автоматически скрытым всякий раз, когда уровень 2 становится скрытым. Вероятно, вы захотите добавить эту функцию.)

...