隐藏元素javascript中的数组

时间:2013-09-12 09:57:09

标签: c# javascript html asp.net

我是一个绝对的javascript noob并且正在使用ASP.net,在我的aspx.cs文件后面的代码中,我使用html标签声明了web文档的主体,如下所示...

public void CreateForm(string passengerType, int passengerCount)
    {
        for (int i = 1; i <= passengerCount; i++)
        {
            Response.Write("<table id=NameBirthTable" + passengerType + i + ">");
            Response.Write("<tr>"); 
               ...
            Response.Write("<td colspan=2><input id=MiddleName" + passengerType +i                + "type=text /></td>");
                ...
        }
    }

当我尝试调用一个元素的ID时,它在id =“MiddleName [passengerType] [i]”中 我找不到它,我需要获取该文本框的值并将其传递到另一个页面,有人向我建议我使用javascript并尝试将这些元素存储在隐藏元素中并将其添加到javascript中声明的数组中,他说,我没有得到任何其他建议吗?

5 个答案:

答案 0 :(得分:0)

也许:

Response.Write("<td colspan=2><input id='MiddleName" + passengerType + i + "' type=text /></td>");

答案 1 :(得分:0)

如果您在页面上查看来源,您可能会看到:

<td colspan=2><input id=MiddleNameXYZ1>
<td colspan=2><input id=MiddleNameXYZ2>
<td colspan=2><input id=MiddleNameXYZ3>

换句话说,您的编码并不是格式化为您认为的格式。

答案 2 :(得分:0)

检查生成的文档的来源,以查看生成的ID作为代码的输出。请记住,asp.net控件使用不同的ID呈现,然后是服务器端ID。要在你的javascript函数中获取它,你需要做类似的事情:

function getElement(){
    var myEl = document.getElementByID('<%=ControlID.ClientID%>')
}

其中ControlID是您控制的服务器端ID。

在您的特定情况下,ControlID可能不具备可用性,因此可能需要在页面类中创建一个属性,该属性将包含您添加的控件 - 例如:

class MyPage:Page{
    TextBox TextBoxName {get;set;}

    public void CreateForm(string passengerType, int passengerCount)
    {
        TextBoxName = new TextBox();
        this.Controls.Add(TextBoxName);
    }

}

我知道这段代码可能与您当前的实现不匹配,但一般来说它应该以这种方式工作。

答案 3 :(得分:0)

尝试以下

public void CreateForm(string passengerType, int passengerCount)
{
    StringBuilder sb = new StringBuilder();
    sb.AppendLine("<table id='NameBirthTable" + passengerType  + "'>");
    for (int i = 1; i <= passengerCount; i++)
    {
        sb.AppendLine("<tr>");
        sb.AppendLine("<td colspan='2'><input id='MiddleName" + passengerType + i + "' type='text' /></td>");
    }
    sb.AppendLine("</table>");
    Response.Write(sb.ToString());
}

答案 4 :(得分:0)

在服务器端,您可以创建所有已创建ID的列表,并将其作为值输出到隐藏字段。

public void CreateForm(string passengerType, int passengerCount)
{
    /* List to hold id values */
    List<string> ids = new List<string>();

    for (int i = 1; i <= passengerCount; i++)
    {
        Response.Write("<table id=NameBirthTable" + passengerType + i + ">");
        Response.Write("<tr>"); 
        //   ...
        Response.Write("<td colspan=2><input id=MiddleName" + passengerType +i+ "type=text /></td>");
        //    ...

        /* Add newly created input id to list */
        ids.Add("MiddleName" + passengerType +i);
    }

    /* Output the ids collection to hidden field value */
    Response.Write("<input type='hidden' id='hiddenElement' value='" + string.Join(",", ids.ToArray()) + "'></input>");
}

在客户端 javascript,您可以从隐藏元素中获取所有这些ID,循环遍历它们并获取所有创建的输入元素

/* Get all ids from hidden element */
var ids = document.getElementById('hiddenElement').value.split(',');
/* Loop through all ids */
for (var i = 0; i < ids.length; i++) {
    var element = document.getElementById(ids[0]);
    // do something
}