Динамическое добавление тегов в HTML-документ по нажатию кнопки сразу же отменяется

У меня очень простая таблица с 3 колонками, в которой показаны 2 команды и их результаты. Под таблицей находится форма, которая позволяет добавлять новые команды и их результаты в таблицу. Новый ряд следует добавлять только в том случае, если данные команды имеют разные имена и оценки не являются отрицательными. Я написал следующий код на JavaScript, но он не добавляет строку - он просто показывает новую строку только при нажатии кнопки подтверждения. Когда это не так, данные исчезают. Можете ли вы взглянуть на мой код и проверить, что с ним не так? Я пытался добавить строки в таблицу без события проверки, и это работало отлично.

document.addEventListener("DOMContentLoaded", function () {

var team1 = document.getElementById("team1");
var team2 = document.getElementById("team2");
var points1 = document.getElementById("points1");
var points2 = document.getElementById("points2");
var button = document.querySelector(".btn-primary");
var table = document.querySelector("table");

function validate(e) {
    if (team1.value === team2.value) {
        alert("Enter two differnt teams' names");
    } else if (points1.value < 0 || points2.value < 0) {
        alert("Points number cannot be negative");
    } else {
        var newRow = document.createElement("tr");
        table.appendChild(newRow);
        var newTeam1 = document.createElement("td");
        newRow.appendChild(newTeam1);
        newTeam1.innerHTML = team1.value;
        var newTeam2 = document.createElement("td");
        newRow.appendChild(newTeam2);
        newTeam2.innerHTML = team2.value;
        var newPoints = document.createElement("td");
        newRow.appendChild(newPoints);
        newPoints.innerHTML = points1.value + " - " + points2.value;
    }
}

button.addEventListener("click", validate);
});

1 ответ

Решение

Проблема здесь в том, что кнопка является частью HTML <form>, Нажатие на кнопку отправляет форму и приводит к перезагрузке страницы.

Существует три возможных решения проблемы. используйте любой из них:


1) Поместите кнопку за пределы формы. Удалить <form></form> теги, если они вам не нужны, или разместите кнопку где-нибудь за пределами <form></form> теги.


2) Специально пометьте кнопку как кнопку, которая не отправляет форму:

<button type="button" class="btn-primary">Push me</button>

type="button" не позволяет кнопке отправить форму.


3) В обработчике javascript кнопки скажите кнопке не показывать ее поведение по умолчанию, например:

function validate(e) {
{
    // Your current code here       

    // Additional code to prevent button from showing default behaviour
    e.preventDefault();
    e.returnValue = false;
}

e.returnValue = false; для старых браузеров, e.preventDefault(); для новых браузеров.

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