为什么appendChild添加的新节点离开函数后就消失了?

Why a new node added by appendChild diasppears after leaving the function?

请看下面的代码:

**page.html**:
    <!DOCTYPE html>
    <html>
    <head>
        <title> Playing with JavaScript </title>
        <script src="myjs.js"> </script>
    </head>

<body id="body">

<ul id="mylist">
    <li> David </li>
    <li> Aharon </li>
</ul>

<form>
<input type="text" name="user_input"> <br>
<button onclick="add_item(user_input.value)"> add_item </button>
</form>

</body>
</html>


**myjs.js**    
function add_item(user_input) {
        var new_li = document.createElement("li");
        var new_text = document.createTextNode(user_input);
        new_li.appendChild(new_text);
        document.getElementById("mylist").appendChild(new_li);
    }

此代码创建一个包含两个姓名的列表并显示一个按钮和一个输入行。一旦用户在输入行中输入新名称并单击按钮,新名称就应该被添加到列表中。

它发生的时间很短,然后列表中的新元素就消失了。您知道我可以在代码中更改什么以使列表中的新元素永久保留吗?

我想页面正在重新加载,因为您的按钮元素是表单内的提交按钮 - 当没有为按钮指定 type 属性时,它默认成为提交按钮。您的表单没有指定操作,因此提交会重新加载当前页面。

type="button" 添加到按钮。

这意味着该按钮没有默认行为,只执行 JS 明确执行的操作。

我认为这是因为您的表单已提交并且页面已重新加载

在您的按钮上添加 type="button"

工作示例

function add_item(user_input) {
  var new_li = document.createElement("li");
  var new_text = document.createTextNode(user_input);
  new_li.appendChild(new_text);
  document.getElementById("mylist").appendChild(new_li);
}
<form>
  <input type="text" name="user_input"> <br>
  <button type="button" onclick="add_item(user_input.value)"> add_item </button>
</form>
<ul id="mylist"></ul>

<button> 元素有 3 个 type :

  • submit : default type if no type are specified who submit a form
  • reset : who reset/clear input in a form
  • 按钮:无特定操作