检查学生是否在正确的班级上,并且仅显示所按班级的学生

问题描述 投票:0回答:1

我有一个作业,其中布置了一个显示单选按钮的html脚本,上面写着每个班级的名称,还有一个json文件,列出了所有学生的姓名以及他们上哪班。

我想知道有没有一种方法可以使用addEventListener来做到这一点?因为这是我所听到的是正确的解决方案,所以我必须按照教授的指示去做。

我不允许更改HTML代码。

fetch("studenter.json")
  .then((response) => {
    return response.json();
  })
  .then(function appendData(data) {
    var unordered = document.querySelector(".studenter");
    for (var i = 0; i < data.length; i++) {
      var li = document.createElement("li");
      li.innerHTML = 'Name: ' + data[i].fornavn + ' ' + data[i].etternavn;
      unordered.appendChild(li);
    }
  });
<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8" />
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  <meta http-equiv="X-UA-Compatible" content="ie=edge" />
  <title>Studenter i IIKG1002 og IDG1011</title>
  <script defer src="js/studenterIKlasse.js"></script>
  <link rel="stylesheet" href="css/studenterIKlasse.css" />
</head>

<body>
  <h1>Studenter i IIKG1002 og IDG1011</h1>
  <p>Velg klasse</p>
  <div class="klasseVelger">
    <div>
      <input type="radio" name="programvelger" id="BIGEOMAT" />
      <label for="BIGEOMAT">Bachelor in Engineering, Geomatics</label>
    </div>
    <div>
      <input type="radio" name="programvelger" id="BWU" />
      <label for="BWU">Bachelor in Web Development</label>
    </div>
    <div>
      <input type="radio" name="programvelger" id="ÅRWEB" />
      <label for="ÅRWEB">Web Design - One-year programme</label>
    </div>
    <div>
      <input type="radio" name="programvelger" id="BIXD" />
      <label for="BIXD">Interaction Design - Bachelor's Programme</label>
    </div>
    <div>
      <input type="radio" name="programvelger" id="all" />
      <label for="all">Show all</label>
    </div>
  </div>
  <p>
    <ul class="studenter"></ul>
  </p>
</body>

</html>

这是我要显示的json的示例:

  {
    "fornavn": "Marcus Gimse",
    "etternavn": "Blikstad",
    "studieprogram": "Bachelor in Engineering, Geomatics",
    "forkortelse": "BIGEOMAT"
  },
javascript json click addeventlistener
1个回答
0
投票

确定

您快到了那里

// example data. Remove when doing fetch
const students = [{
  "fornavn": "Marcus Gimse",
  "etternavn": "Blikstad",
  "studieprogram": "Bachelor in Engineering, Geomatics",
  "forkortelse": "BIGEOMAT"
}]

// fetch here and keep the data
// let students = [];
// fetch("studenter.json")
//  .then(response => response.json())
//  .then(data => students = data);


// using delegation - i.e. a click on anything in klasseVelger will give the target in event.target
document.querySelector(".klasseVelger").addEventListener("click", function(e) {
  const tgt = e.target;
  if (tgt.type && tgt.type === "radio") {
    const id = tgt.id;
    console.log(id); // can be removed
    var unordered = document.querySelector(".studenter");
    unordered.innerHTML = ""; // reset
    for (var i = 0; i < data.length; i++) {
      if (id === "all" || id === data[i].forkortelse) {
        var li = document.createElement("li");
        li.innerHTML = 'Name: ' + data[i].fornavn + ' ' + data[i].etternavn;
        unordered.appendChild(li);
      }
    }
  }
})
<h1>Studenter i IIKG1002 og IDG1011</h1>
<p>Velg klasse</p>
<div class="klasseVelger">
  <div>
    <input type="radio" name="programvelger" id="BIGEOMAT" />
    <label for="BIGEOMAT">Bachelor in Engineering, Geomatics</label>
  </div>
  <div>
    <input type="radio" name="programvelger" id="BWU" />
    <label for="BWU">Bachelor in Web Development</label>
  </div>
  <div>
    <input type="radio" name="programvelger" id="ÅRWEB" />
    <label for="ÅRWEB">Web Design - One-year programme</label>
  </div>
  <div>
    <input type="radio" name="programvelger" id="BIXD" />
    <label for="BIXD">Interaction Design - Bachelor's Programme</label>
  </div>
  <div>
    <input type="radio" name="programvelger" id="all" />
    <label for="all">Show all</label>
  </div>
</div>
<p>
  <ul class="studenter"></ul>
</p>
© www.soinside.com 2019 - 2024. All rights reserved.