Как динамически добавлять значения формы в новую строку HTML-таблицы?

Вопрос или проблема

Я пытаюсь динамически добавить значения из формы в HTML-таблицу. Каждый раз, когда пользователь отправляет форму, значения должны добавляться как новая строка в таблице. Однако я не знаю, как добавить новые значения в новую строку и убедиться, что последующие отправки формы добавляются в следующую строку.

Вот структура моей HTML-формы:

<form id="schedule-form">
  <label for="Name">Имя:</label>
  <input type="text" name="Name" id="name">

  <label for="program">Курс:</label>
  <select id="program">
    <option value="BSIT">BSIT</option>
    <option value="BSHM">BSHM</option>
    <option value="BSCRIM">BSCRIM</option>
    <option value="BSED">BSED</option>
    <option value="BEED">BEED</option>
  </select>

  <label for="subjects">Предмет:</label>
  <select id="subjects"></select>

  <label for="room">Аудитория:</label>
  <select id="room">
    <option value="IT Room 1">IT-комната 1</option>
    <option value="IT Lab 1">IT-лаборатория 1</option>
    <option value="IT Lab 2">IT-лаборатория 2</option>
    <option value="IT Lab 3">IT-лаборатория 3</option>
  </select>

  <label for="day">День:</label>
  <select id="day">
    <option value="MWF">Пн, Ср, Пт</option>
    <option value="TTH">Вт, Чт</option>
    <option value="Mon">Пн</option>
    <option value="Tue">Вт</option>
    <option value="Wed">Ср</option>
    <option value="Thu">Чт</option>
    <option value="Fri">Пт</option>
  </select>

  <label for="start-time">Время начала:</label>
  <input type="time" id="start-time">

  <label for="end-time">Время окончания:</label>
  <input type="time" id="end-time">

  <button type="submit">Запланировать</button>
</form>

А вот таблица, в которую я хочу отображать запланированные занятия:

<h3>Запланированные занятия</h3>
<table>
  <thead>
    <th>Имя</th>
    <th>Курс</th>
    <th>Предмет</th>
    <th>Аудитория</th>
    <th>День</th>
    <th>Время</th>
  </thead>
  <tbody id="schedule-table">

  </tbody>
</table>

Вот мой текущий JavaScript (который не работает):

document.getElementById('schedule-form').addEventListener('submit', function(e) {
  e.preventDefault();

  // Получаем значения формы
  let name = document.querySelector('[name="Name"]').value;
  let course = document.getElementById('program').value;
  let subject = document.getElementById('subjects').value;
  let room = document.getElementById('room').value;
  let day = document.getElementById('day').value;
  let startTime = document.getElementById('start-time').value;
  let endTime = document.getElementById('end-time').value;

  // Мне нужно помочь понять, как добавить эти значения в новую строку таблицы
  // и убедиться, что несколько отправок добавляются в следующую строку

});

Лучше создать объект с данными, а затем написать простую функцию, которая использует createElement и добавляет его в нужную таблицу.

  1. Создайте объект со значениями из формы. Поскольку у вас есть только один столбец для времени, я добавил строку для времени, которая принимает время начала и окончания.
  2. Напишите функцию (function addSchedule(Object) { ... }) и вызовите эту функцию (addSchedule(Object)), передав объект в качестве параметра.
  3. Создайте константу, которая будет использоваться для создания нового элемента: const Element = document.createElement('tr')
  4. Итерация по объекту с помощью цикла for. Посмотрите документацию MDN WebDocs.
  5. Так же, как и на шаге 3, создайте элемент для нового td, который временно сохраняется внутри константы.
  6. Включите значение, используя Element.textContent = value
  7. Добавьте TD к TR с помощью TR.appendChild(TD)
  8. Так же, как и на шаге 7, добавьте TR к tbody
document.getElementById('schedule-form').addEventListener('submit', function(e) {
  e.preventDefault();

  // Получаем значения формы
  const DataSet = {
    name: document.querySelector('[name="Name"]').value,
    course: document.getElementById('program').value,
    subject: document.getElementById('subjects').value,
    room: document.getElementById('room').value,
    day: document.getElementById('day').value,
    time: `${document.getElementById('start-time').value} - ${document.getElementById('end-time').value}`
  }

  addSchedule(DataSet);
});

function addSchedule(DataSet) {
  const newTR = document.createElement('tr');

  for (const [key, value] of Object.entries(DataSet)) {
    const newTD = document.createElement('td');
    newTD.textContent = value;
    newTR.appendChild(newTD);
  }

  document.getElementById('schedule-table').appendChild(newTR);
}
<form id="schedule-form">
  <label for="Name">Имя:</label>
  <input type="text" name="Name" id="name">

  <label for="program">Курс:</label>
  <select id="program">
    <option value="BSIT">BSIT</option>
    <option value="BSHM">BSHM</option>
    <option value="BSCRIM">BSCRIM</option>
    <option value="BSED">BSED</option>
    <option value="BEED">BEED</option>
  </select>

  <label for="subjects">Предмет:</label>
  <select id="subjects"></select>

  <label for="room">Аудитория:</label>
  <select id="room">
    <option value="IT Room 1">IT-комната 1</option>
    <option value="IT Lab 1">IT-лаборатория 1</option>
    <option value="IT Lab 2">IT-лаборатория 2</option>
    <option value="IT Lab 3">IT-лаборатория 3</option>
  </select>

  <label for="day">День:</label>
  <select id="day">
    <option value="MWF">Пн, Ср, Пт</option>
    <option value="TTH">Вт, Чт</option>
    <option value="Mon">Пн</option>
    <option value="Tue">Вт</option>
    <option value="Wed">Ср</option>
    <option value="Thu">Чт</option>
    <option value="Fri">Пт</option>
  </select>

  <label for="start-time">Время начала:</label>
  <input type="time" id="start-time">

  <label for="end-time">Время окончания:</label>
  <input type="time" id="end-time">

  <button type="submit">Запланировать</button>
</form>

<h3>Запланированные занятия</h3>
<table>
  <thead>
    <th>Имя</th>
    <th>Курс</th>
    <th>Предмет</th>
    <th>Аудитория</th>
    <th>День</th>
    <th>Время</th>
  </thead>
  <tbody id="schedule-table">

  </tbody>
</table>

Я сталкиваюсь с той же проблемой. У меня уже настроена форма, но я не знаю, как захватить значения и добавлять их как новые строки каждый раз, когда форма отправляется. Если кто-то имеет советы или решение этой проблемы, я был бы очень признателен за помощь!

Ответ или решение

Чтобы динамически добавлять значения формы в новую строку в HTML-таблице при каждом ее отправлении, вы можете воспользоваться следующим подходом. Все, что вам нужно, это обработать событие отправки формы, собрать данные и создать новую строку в таблице с этими данными.

Вот полное решение вашей задачи на основе предоставленной вами структуры HTML:

HTML

Вы уже создали форму и таблицу, так что код, который вы предоставили, вполне годится:

<form id="schedule-form">
    <label for="Name">Name:</label>
    <input type="text" name="Name" id="name">

    <label for="program">Course:</label>
    <select id="program">
        <option value="BSIT">BSIT</option>
        <option value="BSHM">BSHM</option>
        <option value="BSCRIM">BSCRIM</option>
        <option value="BSED">BSED</option>
        <option value="BEED">BEED</option>
    </select>

    <label for="subjects">Subject:</label>
    <select id="subjects"></select>

    <label for="room">Room:</label>
    <select id="room">
        <option value="IT Room 1">IT Room 1</option>
        <option value="IT Lab 1">IT Lab 1</option>
        <option value="IT Lab 2">IT Lab 2</option>
        <option value="IT Lab 3">IT Lab 3</option>
    </select>

    <label for="day">Day:</label>
    <select id="day">
        <option value="MWF">MWF</option>
        <option value="TTH">TTH</option>
        <option value="Mon">Mon</option>
        <option value="Tue">Tue</option>
        <option value="Wed">Wed</option>
        <option value="Thu">Thu</option>
        <option value="Fri">Fri</option>
    </select>

    <label for="start-time">Start Time:</label>
    <input type="time" id="start-time">

    <label for="end-time">End Time:</label>
    <input type="time" id="end-time">

    <button type="submit">Schedule</button>
</form>

<h3>Scheduled Classes</h3>
<table>
    <thead>
        <th>Name</th>
        <th>Course</th>
        <th>Subject</th>
        <th>Room</th>
        <th>Day</th>
        <th>Time</th>
    </thead>
    <tbody id="schedule-table"></tbody>
</table>

JavaScript

Теперь разберем JavaScript код, который будет обрабатывать форму и добавлять новые строки в таблицу:

document.getElementById('schedule-form').addEventListener('submit', function(e) {
    // Отменяем стандартное поведение формы
    e.preventDefault();

    // Получаем значения из формы
    const dataSet = {
        name: document.querySelector('[name="Name"]').value,
        course: document.getElementById('program').value,
        subject: document.getElementById('subjects').value,
        room: document.getElementById('room').value,
        day: document.getElementById('day').value,
        time: `${document.getElementById('start-time').value} - ${document.getElementById('end-time').value}`
    };

    // Добавляем новую строку в таблицу
    addSchedule(dataSet);
});

function addSchedule(dataSet) {
    const newRow = document.createElement('tr');

    for (const [key, value] of Object.entries(dataSet)) {
        const newCell = document.createElement('td');
        newCell.textContent = value;
        newRow.appendChild(newCell);
    }

    document.getElementById('schedule-table').appendChild(newRow);
}

Объяснение кода

  1. Событие submit: Мы добавляем обработчик события на отправку формы, который предотвращает перезагрузку страницы и собирает значения из формы.

  2. Создание объекта dataSet: Этот объект хранит значения, полученные из полей формы, включая время, которое объединяется в одну строку (например, "09:00 – 10:00").

  3. Функция addSchedule: Эта функция принимает объект и создает новую строку (tr) в таблице. Для каждого значения в объекте создается ячейка (td), которая затем добавляется в строку.

  4. Добавление строки в таблицу: Последним шагом новая строка добавляется в tbody таблицы.

Теперь каждый раз при отправке формы новые данные будут добавляться как новая строка в вашей таблице, что позволяет вам динамически управлять данными.

Оцените материал
Добавить комментарий

Капча загружается...