#javascript #html
#javascript #HTML
Вопрос:
Я хочу создать динамический абзац, поэтому я написал следующий код. После того, как пользователь нажмет кнопку, должен быть добавлен новый абзац, внутренний текст которого является вводом пользователя.Но у меня не получилось, кто-нибудь может мне помочь?
var input = document.querySelector(".input");
var btn = document.querySelector("button");
var body = document.querySelector("body");
btn.addEventListener('click', addParagraph);
function addParagraph() {
var childELes = body.children;
for (var p in childELes) {
if (p.tagName === "p")
p.remove();
}
if (input.value.trim() != "") {
var newPara = document.createElement("p");
newPara.innerText = input.value;
body.appendChild(newPara);
}
}
<!DOCTYPE html>
<html>
<head>
<title>test</title>
</head>
<body>
<form>
<p>
<label>input:</label>
<input type="text" class="input">
<button>add</button>
</p>
</form>
</body>
</html>
Комментарии:
1. Просто добавляйте
.preventDefault()
при работе с кликами jsfiddle.net/ta9pxbLc/1
Ответ №1:
Ваш код работает, но форма отправляется, поэтому динамически добавляемое значение теряется, а страница обновляется. Чтобы заставить его работать так, как вы ожидаете, вам нужно использовать e.preventDefault();
для предотвращения отправки формы:
var input = document.querySelector(".input");
var btn = document.querySelector("button");
var body = document.querySelector("body");
btn.addEventListener('click', addParagraph);
function addParagraph(e) {
e.preventDefault();
var childELes = body.children;
for (var p in childELes) {
if (p.tagName === "p")
p.remove();
}
if (input.value.trim() != "") {
var newPara = document.createElement("p");
newPara.innerText = input.value;
body.appendChild(newPara);
}
}
<form>
<p>
<label>input:</label>
<input type="text" class="input">
<button>add</button>
</p>
</form>
Ответ №2:
Добавьте type="button"
в свой html-тег button:
<!DOCTYPE html>
<html>
<head>
<title>test</title>
</head>
<body>
<form>
<p>
<label>input:</label>
<input type="text" class="input">
<button type="button">add</button>
</p>
</form>
<script type="text/javascript">
var input = document.querySelector(".input");
var btn = document.querySelector("button");
var body = document.querySelector("body");
btn.addEventListener('click', addParagraph);
function addParagraph() {
var childELes = body.children;
for (var p in childELes) {
if (p.tagName === "p")
p.remove();
}
if (input.value.trim() != "") {
var newPara = document.createElement("p");
newPara.innerText = input.value;
body.appendChild(newPara);
}
}
</script>
</body>
</html>
Ответ №3:
Вы можете просто добавить, .preventDefault()
чтобы предотвратить button
обновление страницы.
var input = document.querySelector(".input");
var btn = document.querySelector("button");
var body = document.querySelector("body");
btn.addEventListener('click', addParagraph);
function addParagraph(e) {
e.preventDefault();
var childELes = body.children;
for (var p in childELes) {
if (p.tagName === "p")
p.remove();
}
if (input.value.trim() != "") {
var newPara = document.createElement("p");
newPara.innerText = input.value;
body.appendChild(newPara);
}
}
<!DOCTYPE html>
<html>
<head>
<title>test</title>
</head>
<body>
<form>
<p>
<label>input:</label>
<input type="text" class="input">
<button>add</button>
</p>
</form>
</body>
</html>
Ответ №4:
Это потому, что кнопка в форме вызывает submit
и перезагружает страницу. Вы видите новое p-tag
в течение короткого времени. Но страница перезагружается, и все p
исчезло.
Добавьте type="button"
к вашей кнопке, чтобы исключить ее как кнопку отправки или использовать event.preventDefault()
в вашем событии кнопки.
Ответ №5:
Ваш код на 100% корректен, единственная проблема заключается в том, что вы <button>add</button>
выполняете обратную отправку, которая обновляет вашу страницу.
Вам просто нужно добавить тип кнопки в свой тег button, и он будет работать следующим образом:
<button type="button">add</button>
Надеюсь, это поможет
Ответ №6:
function addParagraph(e) {
e.preventDefault();
var a = document.getElementById("inserted-p");
if(a != null) {a.remove();}
if (input.value.trim() != "") {
var newPara = document.createElement("p");
newPara.id = "inserted-p";
newPara.innerText = input.value;
body.appendChild(newPara);
}
}
-
Ваша форма отправляется, поэтому предотвратите это, вызвав
e.preventDefault()
-
Ваше удаление не работает, потому что
p
не является прямым дочерним элементомbody
, поэтому исправьте это, добавивid
к вашему вставленному элементу и удалив тег с помощью соответствующего селектора