Javascript 我创建了HTMLdiv元素,但它在ASP.NET中立即消失

Javascript 我创建了HTMLdiv元素,但它在ASP.NET中立即消失,javascript,asp.net,html,appendchild,createelement,Javascript,Asp.net,Html,Appendchild,Createelement,这是令人沮丧的,我只想在点击按钮时在我的aspx页面上的div内创建新的输入字段。我使用javascript函数witch将新的子元素输入字段附加到现有的div中。看起来如下所示: <%@ Page Language="C#" AutoEventWireup="true" CodeFile="test.aspx.cs" Inherits="Pages_test" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitio

这是令人沮丧的,我只想在点击按钮时在我的aspx页面上的div内创建新的输入字段。我使用javascript函数witch将新的子元素输入字段附加到现有的div中。看起来如下所示:

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="test.aspx.cs" Inherits="Pages_test" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
    <script type="text/javascript">

        function clone() {
            var html = document.createElement("input");
            html.setAttribute("id", 1);
            html.setAttribute("name", "dejan");
            html.setAttribute("value", "some text");
            html.setAttribute("type", "text");
            document.getElementById("panj").appendChild(html);
        }

    </script>
</head>
    <body>
        <form id="form1" runat="server">
            <div id="panj">
                Djubrov
            </div>
            <asp:Button ID="Button1" runat="server" Text="Button" OnClientClick="clone()" />
        </form>
    </body>
</html>

有趣的是,当我点击按钮时,具有设置文本值的文本元素闪烁了一秒钟,但在文字后消失了。我遗漏了什么吗?

您的按钮会向服务器发出请求,随后的响应是用新的HTML文档覆盖页面。JavaScript函数返回false以防止asp:按钮回发:

function clone() {
    // your above code
    return false;
}
然后像这样修改按钮

OnClientClick="return clone()"

如果您的ASP:Butt不需要与服务器进行交互,请考虑将其设为OR。

< P>每次单击该按钮时,将导致回发。 通过停止回发来修复它,如下所示:

<asp:Button ID="Button1" runat="server" Text="Button" OnClientClick="clone(); return false;" />

如果需要代码隐藏中生成的文本字段的值,最好不要通过Javascript动态创建它。您可以创建一个普通文本框,并将其设置为初始不可见,如下所示:

<asp:TextBox ID="yourTextboxID" Visible="False" runat="server" />
Viewstate将在回发中保留这些值

如果每次按下按钮都会创建一个额外的文本框,您也可以在代码隐藏中执行此操作,即在ascx中使用占位符,然后在每次按下按钮时将一个新的文本框附加到该文本框:

yourPlaceholderID.Controls.Add(new TextBox() { ID = "textbox1" });

为什么您认为在客户端创建的元素在回发后仍然保留?服务器甚至不知道它们存在,也不会重新创建它们。然后,当某个用户引发事件时,我如何创建新元素,并使它们在同一页面上可见?我尝试了false,但没有区别。实际上,我创建这个示例只是为了弄清楚如何做其他事情。在现实世界中,我将在页面上有按钮,当用户单击这些按钮时,我将选择相应的名称,使用数据库中的名称选择适当的元素,然后显示新的div,其中包含数据库中的信息。@stanislav您必须从克隆更改为返回克隆。请参阅updateOk,这就是关键所在。但现在我如何使用C代码背后生成的文本字段的值呢?这是可行的。但如何使文本字段在源代码页面中可见?请尝试使用innerHTML属性:document.getElementById'tes_div'.innerHTML=;
yourPlaceholderID.Controls.Add(new TextBox() { ID = "textbox1" });