无法访问通过javascript动态创建的浏览器控件

时间:2013-10-24 10:18:53

标签: javascript asp.net

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

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

请协助:)


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

2 个答案:

答案 0 :(得分:1)

虽然不可能通过ID使用java脚本来获取动态创建的控件。

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

我认为你可以进入Request.Forms集合。

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

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

参考文献: - Form Post Values using plain html controls in ASP.NET web forms

另一个链接

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"];

答案 1 :(得分:0)

您无法从后面的代码访问控制值,因为它们不是服务器控件。具有 runat =“server”属性的控件只能从后面的代码中访问。

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