代码优先:
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);
答案 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正在使用正确的类型生成您正在寻找的元素。