【问题标题】:reset select option while dependencies is default在默认依赖项时重置选择选项
【发布时间】:2021-11-29 19:28:58
【问题描述】:

我使用纯 js。我很难将选择框重置为默认值。正如您在下面的代码中看到的那样,我想让两个选择相互依赖。如果我选择这个,它只会显示这个,但是当我选择选项值 = 0 的第一个选择时重置时,我希望第二个选择也重置为默认值。

const faculties = {
  1: ["Magister Manajemen", "Magister Teologi"],
  2: ["Ilmu Filsafat"],
  3: ["Pendidikan Agama", "Pendidikan Bahasa Inggris", "Pendidikan Ekonomi", "Pendidikan Luar Sekolah"],
  4: ["Akuntansi", "Manejemen"],
  5: ["Agroteknologi"],
  6: ["Informatika", "Sistem Informasi"],
  7: ["Profesi Ners", "Keperawatan"],
  8: ["Sekretari D3"],
};

let facultySelection = document.querySelector("#faculty");
let prodiSelection = document.querySelector("#pStudy");

facultySelection.addEventListener("change", (event) => {
  let prodies = faculties[event.target.value];
  pStudy.innerHTML = prodies.map((p) => `<option value="${p}">${p}</option>`).join("");

  reset();
});

function reset() {
  if (prodiSelection.selected == 0) {
    pStudy.innerHTML = `<option value="0">-- SELECT PROGRAM STUDY --</option>`;
  }
}
<div class="mb-3">
  <label for="faculty">Faculty</label>
  <select class="form-select mt-2" id="faculty" name="faculty">
    <option value="0" selected="selected">--SELECT FACULTY --</option>
    <option value="1">Pascasarjana</option>
    <option value="2">Fakultas Filsafat</option>
    <option value="3">Fakultas Keguruan dan Ilmu Pendidikan</option>
    <option value="4">Fakultas Ekonomi dan Bisnis</option>
    <option value="5">Fakultas Pertanian</option>
    <option value="6">Fakultas Ilmu Komputer</option>
    <option value="7">Fakultas Keperawatan</option>
    <option value="8">Akademi Sekretari Manajemen Indonesia Klabat</option>
  </select>
</div>
<div class="mb-3">
  <label for="pStudy">Program of Study</label>
  <select class="form-select mt-2" id="pStudy" name="pStudy">
    <option value="0" selected>--SELECT PROGRAM OF STUDY --</option>
  </select>
</div>





<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.1/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-F3w7mX95PdgyTmZZMECAngseQB83DfGTowi0iMjiWaeVhAn4FJkqJByhZMI3AhiU" crossorigin="anonymous" />

<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.1.1/dist/js/bootstrap.bundle.min.js" integrity="sha384-/bQdsTh/da6pkI1MST/rWKFNjaCP5gBSY4sEBT38Q/9RBh9AH40zEOg7Hlq2THRZ" crossorigin="anonymous"></script>

【问题讨论】:

    标签: javascript html css pure-js


    【解决方案1】:

    这能解决您的问题吗?您应该先检查 faculties 对象中是否存在所选值

    const faculties = {
      1: ["Magister Manajemen", "Magister Teologi"],
      2: ["Ilmu Filsafat"],
      3: ["Pendidikan Agama", "Pendidikan Bahasa Inggris", "Pendidikan Ekonomi", "Pendidikan Luar Sekolah"],
      4: ["Akuntansi", "Manejemen"],
      5: ["Agroteknologi"],
      6: ["Informatika", "Sistem Informasi"],
      7: ["Profesi Ners", "Keperawatan"],
      8: ["Sekretari D3"],
    };
    
    let facultySelection = document.querySelector("#faculty");
    let prodiSelection = document.querySelector("#pStudy");
    
    facultySelection.addEventListener("change", (event) => {
      const val = event.target.value;
    
      if ( !val || !faculties[val] ) {
        pStudy.innerHTML = `<option value="0">-- SELECT PROGRAM STUDY --</option>`;
        return;
      } 
    
      let prodies = faculties[val];
      pStudy.innerHTML = prodies.map((p) => `<option value="${p}">${p}</option>`).join("");
    });
    <div class="mb-3">
      <label for="faculty">Faculty</label>
      <select class="form-select mt-2" id="faculty" name="faculty">
        <option value="0" selected="selected">--SELECT FACULTY --</option>
        <option value="1">Pascasarjana</option>
        <option value="2">Fakultas Filsafat</option>
        <option value="3">Fakultas Keguruan dan Ilmu Pendidikan</option>
        <option value="4">Fakultas Ekonomi dan Bisnis</option>
        <option value="5">Fakultas Pertanian</option>
        <option value="6">Fakultas Ilmu Komputer</option>
        <option value="7">Fakultas Keperawatan</option>
        <option value="8">Akademi Sekretari Manajemen Indonesia Klabat</option>
      </select>
    </div>
    <div class="mb-3">
      <label for="pStudy">Program of Study</label>
      <select class="form-select mt-2" id="pStudy" name="pStudy">
        <option value="0" selected>--SELECT PROGRAM OF STUDY --</option>
      </select>
    </div>
    
    
    
    
    
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.1/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-F3w7mX95PdgyTmZZMECAngseQB83DfGTowi0iMjiWaeVhAn4FJkqJByhZMI3AhiU" crossorigin="anonymous" />
    
    <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.1.1/dist/js/bootstrap.bundle.min.js" integrity="sha384-/bQdsTh/da6pkI1MST/rWKFNjaCP5gBSY4sEBT38Q/9RBh9AH40zEOg7Hlq2THRZ" crossorigin="anonymous"></script>

    【讨论】:

    • 您好,感谢您的回答。如果不是这样,你介意向我解释一下里面发生了什么吗?因为我还在学习,我想了解:D
    • 肯定,您有一个函数reset,其中您尝试重置#pstudy的选项时选定的值为0,但首先要检查您的faculties列表中是否存在选定的值它会在let prodies = faculties[val]; 这一行中引发错误。这就是我在这一行中所做的if ( !val || !faculties[val] )
    • pStudy.innerHTML = ... 是一个非常糟糕的主意(即使用元素 ID 作为全局变量)。您已经将元素引用为 prodiSelection,因此请使用:prodiSelection.innerHTML = ....
    猜你喜欢
    • 1970-01-01
    • 2018-05-06
    • 2017-12-11
    • 2015-09-19
    • 2017-12-18
    • 1970-01-01
    • 1970-01-01
    • 2014-03-27
    • 1970-01-01
    相关资源
    最近更新 更多