我正在开发一个javascript函数,它接受三个控件的名称,然后在页面上找到它们。这些控件有五组。为简单起见,我想使用相同的函数并传入控件名称集,然后让函数通过clientID动态查找控件。有没有办法做到这一点?
这是我到目前为止所拥有的......
function InsertKeyword(keywordCtrl, subjCtrl, bodyCtrl) {
var ctrl;
if (OnSubj) ctrl = $find("<%=" + subjCtrl + ".ClientID%>");
if (OnBody) ctrl = $find("<%=" + bodyCtrl + ".ClientID%>");
if (OnSubj == 1 || OnBody == 1) {
var selectedIndex = document.getElementById(keywordCtrl).selectedIndex;
var selectedText = document.getElementById(keywordCtrl).options[selectedIndex].text;
var strSpan = '<u>' + selectedText + '</u> ';
ctrl.pasteHtml(strSpan);
}
}
这不起作用,但它说明了我正在尝试做的事情。
如何使用javascript动态查找控件的ClientID?
答案 0 :(得分:3)
<%= %>
是服务器端,而不是客户端代码,因此不是......
if (OnSubj) ctrl = $find("<%=" + subjCtrl + ".ClientID%>");
if (OnBody) ctrl = $find("<%=" + bodyCtrl + ".ClientID%>");
你应该有类似......
if (OnSubj) ctrl = $find("<%=subjCtrl.ClientID%>");
if (OnBody) ctrl = $find("<%=bodyCtrl.ClientID%>");
subjCtrl
和bodyCtrl
是实际的服务器端控制对象。
你可以让你的JavaScript工作的唯一方法就是你调用这样的函数......
InsertKeyword("my keyword", "<%=subjCtrl.ClientID%>", "<%=bodyCtrl.ClientID%>");
然后你的JavaScript就像......
function InsertKeyword(keywordCtrl, subjCtrl, bodyCtrl) {
var ctrl;
if (OnSubj) ctrl = $find(subjCtrl);
if (OnBody) ctrl = $find(bodyCtrl);
<强>更新强>
根据OP的评论,在通过标记在服务器端控件上声明<%= %>
属性时,无法使用OnClientClick
语法
以下操作不起作用,<%=myCtrl.ClientID%>
将完全呈现为发送到浏览器时...
<asp:Button runat="server" ID="test" OnClientClick="myFnc('<%=myCtrl.ClientID%>')"/>
相反,您需要通过其中一种方法通过代码隐藏(C#假设)设置属性...
test.OnClientClick = "myFnc('" + myCtrl.ClientID + "');";
test.OnClientClick = string.Format("myFnc('{0}');", myCtrl.ClientID);
答案 1 :(得分:1)
如果我理解你的问题,那么我认为你想在javascript中使用控件的ID。如果您使用的是Asp.Net 4,请设置控件ClinetIDMode = Static
。现在在javascript中输入相同的控件ID。举个例子,如果你有一个ID为myControl
的控件,那么在javascript中你可以把它作为
var cID = document.getElementByID('myControl');
答案 2 :(得分:0)
你做不到:
“&lt;%=”+ subjCtrl +“。ClientID%&gt;”
你需要:
“&lt;%= codeBehindControlID.ClientID%&gt;”
答案 3 :(得分:0)
如何使用CSS选择器在ASP.NET clientID的最后部分获得控件匹配,如下所示:
$.find('input[name$='+subjCtrl+']:checked');
未经测试,但应该是这样的。
编辑:我不知道您使用的是什么控件,但这只是一个例子。如果您发布ASP.NET标记,也可以提供更详细的内容。