簡體   English   中英

如何使用javascript動態查找控件的ClientID?

[英]How to dynamically find ClientIDs of controls using javascript?

我正在開發一個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%>");

其中subjCtrlbodyCtrl是實際的服務器端控制對象。

你可以讓你的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);

UPDATE

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

如果我理解你的問題,那么我認為你想要javascript中的控件ID。 如果您使用的是Asp.Net 4,則設置控件ClinetIDMode = Static 現在在javascript中輸入相同的控件ID。 舉個例子,如果你有一個ID為myControl的控件,那么你可以在javascript中得到它

var cID = document.getElementByID('myControl');

你不能這樣做:

“<%=”+ subjCtrl +“。ClientID%>”

你需要:

“<%= codeBehindControlID.ClientID%>”

如何使用CSS選擇器在ASP.NET clientID的最后部分獲得控件匹配,如下所示:

$.find('input[name$='+subjCtrl+']:checked');

沒有經過測試,但應該是這樣的。

編輯:我不知道你正在使用什么控件,但這是一個例子。 如果您發布ASP.NET標記,也可以提供更詳細的一個。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM