编程语言
首页 > 编程语言> > 如何使用javascript动态查找控件的ClientID?

如何使用javascript动态查找控件的ClientID?

作者:互联网

我正在研究一个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>&nbsp';
                ctrl.pasteHtml(strSpan);
            }
        }

这不起作用,但是它说明了我正在尝试做的事情.

您如何使用javascript动态查找控件的ClientID?

解决方法:

<%=%>是服务器端的代码,而不是客户端的代码,所以代替…

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);

标签:dynamic,client-side,asp-net,javascript,jquery
来源: https://codeday.me/bug/20191101/1981060.html