3

我正在开发一个 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?

4

4 回答 4

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

WheresubjCtrlbodyCtrl是实际的服务器端控制对象。

你可以让你的 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);
于 2012-07-12T13:55:00.040 回答
1

如果我理解您的问题,那么我认为您需要 javascript 中的控件 ID。如果您使用的是 Asp.Net 4,请设置控件ClinetIDMode = Static。现在在 javascript 中输入相同的控件 ID。例如,如果您有一个带有 ID 的控件,myControl那么在 javascript 中您可以将其作为

var cID = document.getElementByID('myControl');
于 2012-07-12T14:04:47.957 回答
0

如何使用 CSS 选择器在 ASP.NET clientID 的最后一部分进行控件匹配,如下所示:

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

未经测试,但应该是这样的。

编辑:我不知道您使用的是什么控件,但这是一个示例。如果您也发布 ASP.NET 标记,可以提供更详细的信息。

于 2012-07-12T13:54:53.603 回答
0

你不能这样做:

"<%=" + subjCtrl + ".ClientID%>"

你需要:

“<%= codeBehindControlID.ClientID %>”

于 2012-07-12T13:50:31.693 回答