我希望能够在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
}
答案 0 :(得分:1)
'<%= Button1.ClientID %>'
是用asp.net页面渲染中的控件ID替换的,
但是当您在客户端传递变量时,您应该传递id并使用它而不使用任何%scops
所以试试这个
function getGenericControl(control)
{
var dynamicControl = control;
alert(dynamicControl);
//do stuff with dynamicContorl
}
<强>更新强>
您可以使用&lt;%= ClientID%&gt;为上面的方法生成参数,所以只需像这样更改OnClientClicks并使用上面的方法
<asp:LinkButton ID="Button2" runat="server" OnClientClick="doStuffToGenericControl(this)">...</asp:LinkButton>
答案 1 :(得分: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
}
答案 2 :(得分:0)
如果可能的话,我强烈建议使用一个类,
var elems = document.getElementsByTagName('*'), i;
for (i in elems) {
if((' ' + elems[i].className + ' ').indexOf(' ' + matchClass + ' ')
> -1) {
elems[i].innerHTML = content;
}
}