javascript - 为什么我不能动态创建 html 元素?

标签 javascript html

我想创建动态段落,所以我写了下面的代码。用户点击按钮后,应该添加一个新的段落,其 innerText 是用户的输入。但是我失败了,有没有人可以帮助我?

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>

最佳答案

您的代码正在运行,但正在提交表单,这就是动态添加的值丢失并刷新页面的原因。要使其按预期工作,您需要使用 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>

关于javascript - 为什么我不能动态创建 html 元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55571722/

相关文章:

javascript - 使用javascript获取包含GET变量的路径

javascript - 使用react.js将html <img> 组件作为参数属性传递到 <li> 标签中

html - 不同移动页面上的页脚较小

jquery - 高级 CSS HTML 窗口大小调整

javascript - 使用 Tagsinput Bootstrap 在 console.log 上重复值

javascript - 如何在 Phaser 3 中将数据从一个场景传递到另一个场景?

javascript - 搜索对象中的子字符串

javascript - 如何在 React 中动态更改按钮大小和颜色

javascript - 我的表单设计逻辑有哪些缺点?

javascript - 我可以通过 Ajax 请求将 javascript 从 MVC Controller 返回到 View 吗?