我希望能够在 JavaScript 函数中获取 ASP.NET 控件的 ClientID。我还希望能够传入一个包含控件名称的 var,以便不同的控件可以使用相同的函数。
例如,如果我想使用一个名为 Button1 的控件,这可以正常工作:
function doStuffToButton1Control()
{
var buttonControl = document.getElementById('<%= Button1.ClientID %>');
//do stuff with buttonControl
}
但是当我尝试使控件名称动态化时出现错误。我正在尝试将 ClientID 调用串在一起,如下所示:
function doStuffToGenericControl(controlName)
{
var dynamicControl = document.getElementById('<%= ' + controlName + '.ClientID %>');
//do stuff with dynamicContorl
}
我在创建字符串时尝试使用双引号或单引号,但错误始终是“字符串文字中的字符过多”或“字符文字中的字符过多”。控件存在并且名称正确传递(由 测试alert(name)
)。
有没有更好的方法来解决这个问题,还是我错过了一些明显的东西?
谢谢!
更新:此功能将在母版页上。任何数量的子页面都会调用它。例如,一个子页面可能有一个这样调用它的 ASP 控件:
<asp:LinkButton ID="Button2" runat="server" OnClientClick="doStuffToGenericControl('Button2')">...</asp:LinkButton>
但是另一个页面可能有这个也调用它的 ASP 控件:
<asp:LinkButton ID="Button4" runat="server" OnClientClick="doStuffToGenericControl('Button4')">...</asp:LinkButton>
但是,这些控件的 ID 通常会在呈现时由 ASP.NET 更改,因此它们最终看起来像,例如,MainContent_Button2
而不是只是Button2
. 为了解决这个问题,我传统上只是使用<%= Button1.ClientID %>
,但由于我希望任意数量的控件都能够使用这个功能,所以我遇到了一些麻烦。
更新 2:我可以通过this
调用getAttribute
来获得我需要的东西。(显然,这仅在您所指的控件是您正在单击的控件时才有效,但这正是我所需要的)像这样:
function doStuffToGenericControl(controlName)
{
var controlID = controlName.getAttribute('id');
var control = document.getElementById(controlID);
//do stuff with control
}