Создание новой строки в таблице. Javascript

196
22 января 2022, 04:10

Я пытаюсь добавить новую строку в DOM. Есть инпуты Имя и Фамилия, и кнопка Добавить. При нажатии на кнопку должна добавиться новая строка в таблице. Работа над ошибками, не дает результатов.

<table class="table">
    <tr>
        <th>Имя</th>
        <th>Фамилия</th>
        <th>Удалить</th>
    </tr>
    <tr>
        <td>Иван</td>
        <td>Васильевич</td>
        <td class="delete"><i class="fa fa-trash"></i></td>
    </tr>
    <tr>
        <td>Влад</td>
        <td>Анатольевич</td>
        <td class="delete"><i class="fa fa-trash"></i></td>
    </tr>
</table>
<form action="" id="form">
    <input type="text" name="" class="name" placeholder="Введите имя">
    <input type="text" name="" class="surname" placeholder="Введите фамилию">
    <button type="submit" class="btn">Добавить строку</button>
</form>

Данный скрипт написал сам, более упрощая скрипт найденный в интернете. Но он не работает как я и предпологал. Мне сейчас важно понять как все работает, вроде сделал все по закону. Второй день уже сижу с этой задачей. Если есть варианты, накиньте идеи, пожалуйста.

var table = document.querySelector('.table');
table.addEventListener('click', checkAct);
function checkAct(event) {
    if (event.target.tagName === 'TD' && event.target.className !== 'delete') {
        editTd(event.target);
    } else if ((event.target.classList.contains('fa-trash')) === true) {
        event.target.closest('tr').remove();
    }
}
function editTd(target) {
    var input = document.createElement('input');
    input.value = target.innerHTML;
    target.innerHTML = '';
    target.appendChild(input);
    input.addEventListener('keypress',addChanges);
}
function addChanges(event) {
    var newCreateInput = event.target;
    var parent = newCreateInput.parentNode;
    if(event.keyCode === 13) {
        parent.innerHTML = newCreateInput.value;
    }
}
var inputName = document.querySelector('.name');
var inputSurname = document.querySelector('.surname');
var btn = document.querySelector('.btn');
var tr = document.createElement('tr');
function definitionsName(name) {
    var td = document.createElement('td');
    td.innerHTML = name.value;
    tr.appendChild(td);
}
function definitionsSurname(surname) {
    var td = document.createElement('td');
    td.innerHTML = surname.value;
    tr.appendChild(td);
}
btn.addEventListener('click',addTr);
function addTr() {
    if (inputName.value === '' || inputSurname.value === '') {
        return alert('Заполните поля Имя и Фамилия');
    }
    definitionsName(name);
    definitionsSurname(surname);
    var td = document.createElement('td');
    var i = document.createElement('i');
    i.classList.add('fa fa-trash');
    td.appendChild(i);
    tr.appendChild(td);
    table.appendChild(tr);
}
Answer 1

Скопировал код к себе, несколько поправил, вот что получилось:

<table class="table">
    <tr>
        <th>Имя</th>
        <th>Фамилия</th>
        <th>Удалить</th>
    </tr>
    <tr>
        <td>Иван</td>
        <td>Васильевич</td>
        <td class="delete"><i class="fa fa-trash"></i></td>
    </tr>
    <tr>
        <td>Влад</td>
        <td>Анатольевич</td>
        <td class="delete"><i class="fa fa-trash"></i></td>
    </tr>
</table>
<form action="" id="form">
    <input type="text" name="" class="name" placeholder="Введите имя">
    <input type="text" name="" class="surname" placeholder="Введите фамилию">
    <button type="submit" class="btn">Добавить строку</button>
</form>
 <script>
var table = document.querySelector('.table');
table.addEventListener('click', checkAct);
function checkAct(event) {
    if (event.target.tagName === 'TD' && event.target.className !== 'delete') {
        editTd(event.target);
    } else if ((event.target.classList.contains('fa-trash')) === true) {
        event.target.closest('tr').remove();
    }
}
function editTd(target) {
    var input = document.createElement('input');
    input.value = target.innerHTML;
    target.innerHTML = '';
    target.appendChild(input);
    input.addEventListener('keypress',addChanges);
}
function addChanges(event) {
    var newCreateInput = event.target;
    var parent = newCreateInput.parentNode;
    if(event.keyCode === 13) {
        parent.innerHTML = newCreateInput.value;
    }
}
var inputName = document.querySelector('.name');
var inputSurname = document.querySelector('.surname');
var btn = document.querySelector('.btn');
var tr = document.createElement('tr');
function definitionsName(name) {
    var td = document.createElement('td');
    td.innerHTML = name.value;
    tr.appendChild(td);
}
function definitionsSurname(surname) {
    var td = document.createElement('td');
    td.innerHTML = surname.value;
    tr.appendChild(td);
}
btn.addEventListener('click',addTr);
function addTr(event) {
    event.preventDefault();
    if (inputName.value === '' || inputSurname.value === '') {
        return alert('Заполните поля Имя и Фамилия');
    }
    definitionsName(inputName);
    definitionsSurname(inputSurname);
    var td = document.createElement('td');
    var i = document.createElement('i');
    i.classList.add('fa');
    i.classList.add('fa-trash');
    td.appendChild(i);
    tr.appendChild(td);
    table.appendChild(tr);
}
 </script>
READ ALSO
Проблема с переводом кода с PascalABC.Net на JS

Проблема с переводом кода с PascalABC.Net на JS

Доброго времени суток знатоки! У меня есть код на PascalABC, который я пытаюсь перевести на JS, я вроде ка его переделал, но ответы выходят разные,...

120
Как вывести массив в div

Как вывести массив в div

При нажатие на кнопку должна произойти функция которая будет выводить значение input в массив, а массив в divКак вывести массив в div ?

109
Не видит константу как исправить?

Не видит константу как исправить?

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

163
Как разбить js файл на модули?

Как разбить js файл на модули?

Подскажите, пожалуйста, как разделить js код на несколько файлов и импортировать их в этот файл

155