innerHTML不';不要永久添加HTML元素

innerHTML不';不要永久添加HTML元素,html,innerhtml,appendchild,Html,Innerhtml,Appendchild,我试图理解下面代码中innerHTML的行为。每次按下按钮时,我都想永久性地添加一个新的div块,但新块似乎只在瞬间弹出,然后消失 有人知道为什么会这样,以及如何解决吗 另外,当我将代码更改为使用appendChild而不是innerHTML时,我会收到一个错误,即Node.appendChild的参数1不是对象。。我不知道这是什么意思 非常感谢您的帮助 代码如下: <DOCTYPE html> <html> <body> <fo

我试图理解下面代码中
innerHTML
的行为。每次按下按钮时,我都想永久性地添加一个新的
div
块,但新块似乎只在瞬间弹出,然后消失

有人知道为什么会这样,以及如何解决吗

另外,当我将代码更改为使用
appendChild
而不是
innerHTML
时,我会收到一个错误,即Node.appendChild的
参数1不是对象。
。我不知道这是什么意思

非常感谢您的帮助

代码如下:

<DOCTYPE html>
<html>
    <body>
        <form onSubmit="loadData()">
            <input type="submit" id="button">
        </form>

        <div id="block">List of items:</div>

        <script>
            function loadData(){
                document.getElementById("block").innerHTML += "<div>item</div>";
            //  document.getElementById("block").appendChild("<div>item</div>");

            };

        </script>
    </body>
</html>

项目清单:
函数loadData(){
document.getElementById(“块”).innerHTML+=“项”;
//document.getElementById(“块”).appendChild(“项”);
};

由于您正在提交,因此页面将重新加载,HTML将被删除

如果需要项目持久化,则需要使用cookie、本地存储或服务器端解决方案

函数addItem()
{
document.getElementById(“块”).innerHTML+=“项”;
}

项目清单:

由于您正在提交,因此页面将重新加载,HTML将被删除

如果需要项目持久化,则需要使用cookie、本地存储或服务器端解决方案

函数addItem()
{
document.getElementById(“块”).innerHTML+=“项”;
}

项目清单:

您正在提交页面。appendChild或innerHtml直接发生在提交之后,即加载新页面之前。加载新页面后,当前页面(已应用修改)将被取消并替换为新页面

如果希望在新页面上发生某些事情,则需要在该页面上执行代码。(或者不要使用表单提交,而是使用ajax发送表单)


appendChild不适用于您的原因是appendChild需要一个dom节点作为参数,而不是字符串。它类似于
document.getElementById(“foo”).appendChild(document.createElement(“div”))
。(棘手的部分是,使用createElement,您会得到一个空元素,您还需要将所需的内容放入其中。

您正在提交页面。appendChild或innerHtml在提交后直接发生,在加载新页面之前。加载新页面后,当前页面(经过应用的修改)被取消并替换为新页面

如果希望在新页面上发生某些事情,则需要在该页面上执行代码(或者不要使用表单提交,而是使用ajax发送表单)


appendChild不适用于您的原因是appendChild需要一个dom节点作为参数,而不是字符串。它类似于
document.getElementById(“foo”).appendChild(document.createElement(“div”)
。(棘手的是,使用createElement,您会得到一个空元素,您还需要将所需内容放入其中。

您的第一个问题已经由@lee回答了。 您的第二个答案的问题是,您不能像以前那样使用appendChild。如果您想使用append child,根据,您必须执行以下操作:

var mydiv = document.createElement("div");
mydiv.appendChild(document.createTextNode("item"));
document.getElementById("block").appendChild(mydiv);

以获得您要求的结果。

您的第一个问题已由@lee回答。 您的第二个答案的问题是,您不能像以前那样使用appendChild。如果您想使用append child,根据,您必须执行以下操作:

var mydiv = document.createElement("div");
mydiv.appendChild(document.createTextNode("item"));
document.getElementById("block").appendChild(mydiv);

以获得您要求的结果。

您使用的是一个提交按钮,它会导致重新加载。使用常规按钮,您不会遇到此问题。因此,我将输入标记替换为此
submit
。当我点击按钮时,似乎什么也没有发生,因为您的代码只是添加了“onSubmit”项.查看我的解决方案和注释…啊,好的,这部分已经解决了。你知道为什么appendChild在这种情况下不起作用吗?谢谢!你使用的是导致重新加载的提交按钮。使用常规按钮,你就不会有这个问题。所以我用这个
提交
替换了输入标记。当我点击按钮时,似乎什么都没有发生这是因为您的代码只添加了“onSubmit”项。请参阅我的解决方案和注释…啊,好的,这部分已经解决了。您知道为什么appendChild在这种情况下不起作用吗?谢谢!谢谢!假设这样,而不只是添加文本“item”,我想向新创建的div添加一些属性,例如class、height、width属性,我该怎么做?您可以用同样的方法创建属性节点。为了更方便地处理代码,我刚刚为您制作了一个简短的代码笔。谢谢!假设这样做,而不只是添加文本“item”,我想向新创建的div添加一些属性,例如class、height、width属性,我该怎么做?你可以用同样的方法创建属性节点。为了更方便地处理代码,我刚刚为你制作了一个简短的代码笔。谢谢Matthias!我想尝试使用ajax发送表单,因为这对我来说是新的东西。你介意给我一个一个示例代码展示了如何在我的上述案例中采用ajax?谢谢Matthias!我想尝试使用ajax发送表单,因为这对我来说是新事物。您介意给我一个示例代码展示如何在我的上述案例中采用ajax吗?