getElementById.elements没有拾取标签

时间:2015-11-20 22:20:54

标签: javascript jquery asp.net

代码优先:

function loopForm() {

var e = document.getElementById("form1").elements;

for (var i = 0; i < e.length; i++) {
  alert('this is ' + e[i].ID + ' of type' + e[i].type);
}  

我将上面的代码放在.js中,它是从.aspx中调用的,在服务器端使用动态创建的控件(如textbox,dropdownlist,checkbox和labels)以form1的形式调用。我的问题是,

  

代码正在接收所有控件&#39; ID和类型,除外   标签,我正在寻找一种操纵标签的方法(改变   style.display,color等)

我尝试过使用JQuery代码,例如:

$("#form1 label").each(function() {  //I used "div", "label" and all sort
alert('hi');
});  

并不起作用。请注意,虽然document.getElementById可能有效,但页面上存在的控件每次都不同,因此无法进行硬编码。

编辑:这里是如何将标签添加到.aspx(在我的代码隐藏中):

private Label lbl = new Label();
System.Web.UI.HtmlControls.HtmlGenericControl NewDiv = new System.Web.UI.HtmlControls.HtmlGenericControl("DIV");  
NewDiv1.Controls.Add(lbl);
form1.Controls.Add(NewDiv);

2 个答案:

答案 0 :(得分:5)

当您谈到labels时,我怀疑您指的是ASP.NET服务器控件,例如asp:Label。如果是这种情况,那么您真正在寻找<span>代码,因为ASP.NET会将<asp:Label>转换为html <span>

如果您想通过Id引用这些元素,您会注意到ASP.NET在客户端使用的ID与您在服务器端定义的ID不同。

但是,有一种解决方法。如果您希望客户端ID与服务器ID相同,请在服务器控件上设置以下属性:ClientIdMode="Static".

例如,在您的.aspx页面中,您有:

<asp:Label runat="server" Id="lblName"></asp:Label>

它将在html中生成类似的内容:

<span id="someservergeneratedid_lblName"></span>

如果您想自己控制ID,可以这样做:

<asp:Label runat="server" ID="lblName" ClientIdMode="static"></asp:Label>

这将在html中生成:

<span id="lblName"></span>

答案 1 :(得分:2)

  

代码正在拾取所有控件的ID和类型,标签除外

这是正常的。元素集合只应包含表单控件(和某些原因的字段集)。标签不应该在那里。

$("div").each(function() { alert($(this).val()); });

Div和label元素没有值,因此不起作用。

您可以轻松地选择HTML标签元素:

jQuery("#form1 label").each(function () {
    jQuery("body").append("<p>Appending because alert is disabled in snippets</p>");
});
label {
  display: block;
  padding: 2px;
  margin: 2px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<form id="form1">
  <label>Hello
    <input name="hello" value="world">
  </label>
  <label>Goodbye
    <input name="hello" value="world">
  </label>
</form>

正如Olivier指出的那样,请确保您的HTML看起来如预期,并且ASP.NET正在使用正确的类型生成您正在寻找的元素。