我有2个DropDownLists,我试图将第二个切换为Enable = true,当在第一个DropDownList中我选择了选项号2时。
当我在VS上运行代码时,收到此错误: “JavaScript运行时错误:无法设置未定义或空引用的属性'setAttribute'”
<script language="javascript">
function Test(ddlId) {
var ControlName = document.getElementById(ddlId.id);
if (ControlName.value == 2) {
alert("good");
document.getElementById("ddlActivitiesParams2").setAttribute("Enable", true);
//document.getElementById("ddlActivitiesParams2").disabled = true;
}
}
</script>
<asp:TemplateColumn HeaderText="Param1">
<HeaderStyle Width="25%"></HeaderStyle>
<ItemStyle HorizontalAlign="Center" Width="25%"></ItemStyle>
<ItemTemplate>
<asp:Label ID="lblParam1Desc" runat="server" Text='' Width="90%" />
</ItemTemplate>
<FooterTemplate>
<asp:DropDownList ID="ddlAgentParams" onchange="Test(this);" DataValueField="Value" DataTextField="Text" DataSource=' <%# GetThresholdsAgentTypeParams() %> ' runat="server" Width="90%">
</asp:DropDownList>
</FooterTemplate>
</asp:TemplateColumn>
<asp:TemplateColumn HeaderText="Param2">
<HeaderStyle Width="25%"></HeaderStyle>
<ItemStyle HorizontalAlign="Center" Width="25%"></ItemStyle>
<ItemTemplate>
<asp:Label ID="lblParam2Desc" runat="server" Text='aaa' Width="90%" />
</ItemTemplate>
<FooterTemplate>
<asp:DropDownList ID="ddlActivitiesParams2" Enabled="false" Visible="true" DataValueField="Value" DataTextField="Text" DataSource=' <%# GetActivities() %> ' runat="server" Width="90%">
</asp:DropDownList>
</FooterTemplate>
</asp:TemplateColumn>
答案 0 :(得分:2)
您正在寻找错误的ID。 ASP.Net客户端ID&S将在运行时更改。您无法在选择器中使用服务器端块,因为您尝试访问的控件位于另一个控件中。
由于你的ddl是一个页脚模板,我假设它们只有一个。如果这是真的并且您正在使用支持它的ASP.Net版本,则可以将属性ClientIDMode="static"
放在ddl上,并且ID不会在运行时更改。
否则,您可能只想在下拉列表中添加一个唯一的cssclass,并根据类而不是ID选择它。
答案 1 :(得分:0)
通常情况下容器会在渲染过程中更改控件的ID。 在返回的HTML上执行查看源并检查创建的select元素的id是什么