AJAX JSON HTML JS Как вывести таблицу данных?

HTML:

    <table>
        <tr>
            <th>Student Name</th>
            <th>Student Grades</th> 
        </tr>
        <tr>
            <td>
                <select name = "dropdown" id = "dropdown">
                    <option> - </option>
                    <option id = "StudentA"> Student A </option>
                    <option id = "StudentB"> Student B </option>
                </select>
            </td>
            <td></td>
            <td></td>
        </tr>
        <tr>
            <td>
                <select name = "dropdown" id = "dropdown">
                    <option> - </option>
                    <option id = "StudentA"> Student A </option>
                    <option id = "StudentB"> Student B </option>
                </select>
            </td>
            <td></td>
            <td></td>
        </tr>
     </table>

JSON:

{"students":
[ {"studentName" : "studentA", "studentGrades" : "gradeC"}, {"studentName" : "studentB", "studentGrades" : "gradeA+"}, 
]
}

как сделать так, чтобы когда я выбираю раскрывающийся список ученика А, его оценки автоматически отображались в таблице?

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

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
0
44
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Вы можете попробовать следующий подход, чтобы добиться этого. Добавьте событие onchange в тег выбора и на основе выбранного параметра обновите столбец оценок.

Полный рабочий код:

const data = {
  "students": [{
    "studentName": "studentA",
    "studentGrades": "gradeC"
  }, {
    "studentName": "studentB",
    "studentGrades": "gradeA+"
  }, ]
}

function showGrades() {
  const dropdowns = document.querySelectorAll('#dropdown')
  dropdowns.forEach(dropdown => {
    const selectedVal = dropdown.options[dropdown.selectedIndex].id
    const formattedVal = selectedVal.charAt(0).toLowerCase() + selectedVal.slice(1)
    const grades = data.students.map(item => {
      if (item.studentName == formattedVal) {
        dropdown.parentElement.parentElement.children[1].innerText = item.studentGrades;
      }
    })
  })


}
<table>
  <tr>
    <th>Student Name</th>
    <th>Student Grades</th>
  </tr>
  <tr>
    <td>
      <select name = "dropdown" id = "dropdown" onchange = "showGrades()">
        <option> - </option>
        <option id = "StudentA"> Student A </option>
        <option id = "StudentB"> Student B </option>
      </select>
    </td>
    <td></td>
  </tr>
  <tr>
    <td>
      <select name = "dropdown" id = "dropdown" onchange = "showGrades()">
        <option> - </option>
        <option id = "StudentA"> Student A </option>
        <option id = "StudentB"> Student B </option>
      </select>
    </td>
    <td></td>
  </tr>
</table>

Надеюсь, это то, как вы хотели, чтобы это сработало.

Кажется, это работает, но когда у меня есть 2 строки, 2-я строка не работает. Любая идея, как мне это сделать?

IlIlIII lllIlI 23.03.2022 07:41

Я предполагаю, что это из-за неуникальных идентификаторов. Когда есть несколько строк и столбцов, каждый td (для раскрывающегося списка и оценки) должен иметь уникальный идентификатор, который вы можете использовать внутри функции showGrades. Прямо сейчас все select и td имеют одинаковые идентификаторы id = "dropdown" и id = "grades"

Ankit Saxena 23.03.2022 07:49

извините, но кажется, что я не мог найти никакого решения. Можете вы помочь мне?

IlIlIII lllIlI 23.03.2022 08:25

пожалуйста, обновите свой вопрос с помощью html, который вы используете в настоящее время (с несколькими строками). Таким образом, будет легче предоставить точное решение

Ankit Saxena 23.03.2022 08:28

@IlIlIIIlllIlI Я обновил свой ответ в соответствии с обновленным вопросом. Пожалуйста, проверьте. Обновленный код должен решить проблему

Ankit Saxena 23.03.2022 08:41

Вы можете добиться этого, вызвав событие onchange при выборе, а затем отфильтровав массив студентов, используя метод Array.filter(), чтобы получить выбранный вариант studentGrade.

Рабочая демонстрация:

const obj = {
  "students": [
    {"studentName" : "studentA", "studentGrades" : "gradeC"},
    {"studentName" : "studentB", "studentGrades" : "gradeA+"}, 
  ]
};

function getGrades() {
  const selectedOption = document.getElementById('dropdown').value;
  document.getElementById('studentGrade').innerHTML = obj.students.find((obj) => obj.studentName === selectedOption).studentGrades;
}
<table>
        <tr>
            <th>Student Name</th>
            <th>Student Grades</th> 
        </tr>
        <tr>
            <td>
                <select name = "dropdown" id = "dropdown" onchange = "getGrades()">
                    <option> - </option>
                    <option value = "studentA"> Student A </option>
                    <option value = "studentB"> Student B </option>
                </select>
            </td>
            <td id = "studentGrade"></td>
        </tr>
     </table>

Привет, кажется, что это работает, но когда у меня есть 2 строки, они как-то застревают, есть идеи, как это исправить?

IlIlIII lllIlI 23.03.2022 08:26

Вместо строк вы добавляете два столбца, поэтому он не работает: <tr> — это строка, а <td> — это столбец. Вы должны удалить лишние <td> в своем коде.

Rohìt Jíndal 23.03.2022 08:28

Другие вопросы по теме