0

我希望能够在 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
}
4

3 回答 3

1

而不是传递控件名称,为什么不通过在函数中传递它来传递控件本身,如下所示:

  <asp:LinkButton ID="Button2" runat="server" OnClientClick="doStuffToGenericControl(this)">...</asp:LinkButton>

你的功能将是:

function getGenericControl(control)
{
    var dynamicControl = control;
    alert(dynamicControl.id);
    //do stuff whatever you want with dynamicContorl
}
于 2012-11-29T13:47:09.240 回答
1

'<%= Button1.ClientID %>'是在 asp.net 页面渲染上用控件 ID 替换的东西,

但是当您在客户端传递变量时,您应该传递 id 并在没有任何 % 范围的情况下使用它

所以试试这个

function getGenericControl(control)
{
    var dynamicControl = control;
    alert(dynamicControl);
    //do stuff with dynamicContorl
}

更新

您可以使用 <%= ClientID %> 为上述方法生成参数,因此只需像这样更改 OnClientClicks 并使用上述方法

<asp:LinkButton ID="Button2" runat="server" OnClientClick="doStuffToGenericControl(this)">...</asp:LinkButton>
于 2012-11-27T20:06:12.497 回答
0

如果可能的话,我强烈建议使用一个类,

var elems = document.getElementsByTagName('*'), i;
    for (i in elems) {
        if((' ' + elems[i].className + ' ').indexOf(' ' + matchClass + ' ')
                > -1) {
            elems[i].innerHTML = content;
        }
    }
于 2012-11-27T20:08:40.867 回答