簡體   English   中英

為什么我不能動態創建html元素?

[英]Why can't I create html element dynamically?

我想創建動態段落,因此我編寫了以下代碼。 用戶單擊按鈕后,應添加一個新的段落,該段落的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> 

type="button"添加到您的按鈕html標簽中:

 <!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> 

您可以只添加.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> 

這是因為表單中的按鈕調用submit並重新加載頁面。 您會在短時間內看到新的p-tag 但重新加載頁面和所有p一了。

type="button"添加到您的按鈕以將其排除為提交按鈕,或在按鈕事件中使用event.preventDefault()

您的代碼100%正確,唯一的問題是您的<button>add</button>正在執行回發操作,從而刷新了您的頁面。

您只需要在按鈕標簽中添加一種按鈕,它就會像這樣工作:

<button type="button">add</button>

希望這可以幫助

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);
  }
}
  1. 您的表單已發送,因此請致電e.preventDefault()阻止它

  2. 您的刪除無法正常工作,因為p不是body的直接子對象,因此可以通過在插入的元素中添加id並使用適當的選擇器刪除標簽來對其進行修復

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM