[英]How do I dynamically add controls on a hierarchical structure using JavaScript?
[英]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> ';
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);
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.