【问题标题】:unable to access the browser conrols created dynamically through javascript无法访问通过 javascript 动态创建的浏览器控件
【发布时间】:2013-10-24 10:18:52
【问题描述】:

我已经通过 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>

【问题讨论】:

    标签: javascript asp.net


    【解决方案1】:

    虽然ID无法使用java-script获取动态创建的控件。

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

    然后我想你可以加入Request.Forms 收藏。

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

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

    【讨论】:

    • Though it is not possible to get the dynamically created controls using java-script by ID 请阅读ClientIDMode 属性
    • OP 在 java-script 中创建控件,而不是在后面的代码中。
    • Request.Form[]检查他的代码。它给出了空值。不工作
    • @Murali 你在看哪个活动??
    • Request.Forms 在整个页面生命周期中都可以访问,无论它是什么事件。 :)
    【解决方案2】:

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

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

    【讨论】:

    • 错了。如果它们是通过 POST 请求提交的,您可以访问它们,但您不会自动分配给服务器端控件,因为它们不在 Viewstate 中。使用 Request.Form["controlname"] 访问发布的数据。
    猜你喜欢
    • 1970-01-01
    • 2015-06-27
    • 2016-10-09
    • 2019-01-09
    • 2022-11-17
    • 2021-05-23
    • 2012-08-22
    • 1970-01-01
    • 2015-10-18
    相关资源
    最近更新 更多