无法访问通过 JavaScript 动态创建的浏览器

unable to access the browser conrols created dynamically through javascript

本文关键字:动态 创建 浏览器 JavaScript 访问      更新时间:2023-09-26

我已经通过javascript动态创建了控件(文本框和复选框)。即每次我单击添加行按钮时都会生成一个新行。

但是我无法通过代码隐藏访问新创建的元素。

请协助:)


-----------aspx 文件--------------- 在 HTML 表格中添加/删除动态行

<script language="javascript">
    function addRow(tableID) {
        var table = document.getElementById(tableID);
        var rowCount = table.rows.length;
        var row = table.insertRow(rowCount);
        var cell1 = row.insertCell(0);
        var element1 = document.createElement("input");
        element1.type = "checkbox";
        element1.name = "chkbox[]";
        cell1.appendChild(element1);
        var cell2 = row.insertCell(1);
        cell2.innerHTML = rowCount + 1;
        var cell3 = row.insertCell(2);
        var element2 = document.createElement("input");
        element2.type = "text";
        element2.name = "txtbox[]";
        cell3.appendChild(element2);
    }
</script>
 </head>
 <body>
<form id="form1" runat="server">
<div>
    <input type="button" value="Add Row" onclick="addRow('dataTable')" />&nbsp;
    <table id="dataTable" width="350px" border="1">
        <tr>
            <td>
                <input type="checkbox" name="chk" />
            </td>
            <td>
                <input type="text" />
            </td>
        </tr>
    </table>
</div>
</form>
  </body>
虽然不可能

通过 ID 使用 java-script 获取动态创建的控件。

但是我认为您可以在通过java脚本创建控件时使用它name属性。

我想这样你就可以收藏Request.Forms了。

id 属性仅标识 DOM 中的标记。 name 属性允许将标记作为窗体的一部分回发。 ASP.NET 控件或具有 runat=server 的 HTML 元素会自动获取分配的名称和 id 属性。

但是,java-script创建的控件需要指定 name 属性。

参考资料 :- 表单发布值 在 ASP.NET Web 表单中使用纯 html 控件

另一个链接

http://www.quepublishing.com/articles/article.aspx?p=28493

编辑 -1

假设我创建了一个input type='text' name='companyname'那么我可以得到如下值

string companyname = Request.Form["companyname"];

假设我正在创建一个有问题的输入

var element2 = document.createElement("input");
element2.name='companyname'

将此元素添加到表单

cell3.appendChild(element2);

你可以在代码后面得到它作为

 string companyname = Request.Form["companyname"];

您无法从代码隐藏访问控件值,因为这些值不是服务器控件。属性为 runat="server" 的控件只能从代码隐藏访问。

作为解决方法,您可以使用 AJAX 将值发送到 Web 服务,然后可以从那里处理它。