3

私は3つのコントロールの名前を取り込んでページ上でそれらを見つけるjavascript関数に取り組んでいます。これらのコントロールには5つのセットがあります。簡単にするために、同じ関数を使用してコントロール名のセットを渡し、関数に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%>");

実際のサーバー側の制御オブジェクトはどこ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%>')"/>

代わりに、これらのメソッドの1つを介して分離コード(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.NETclientIDの最後の部分でコントロールの一致を取得するのはどうですか。

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

テストされていませんが、そのようなものでなければなりません。

編集:あなたが使用しているコントロールはわかりませんが、これは一例です。ASP.NETマークアップも投稿する場合は、より詳細なものを提供できます。

于 2012-07-12T13:54:53.603 に答える
0

あなたはそれをすることはできません:

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

必要なもの:

"<%= codeBehindControlID.ClientID%>"

于 2012-07-12T13:50:31.693 に答える