0

JavaScript関数内でASP.NETコントロールのClientIDを取得できるようにしたいと思います。また、異なるコントロールが同じ関数を使用できるように、コントロール名を含むvarを渡せるようにしたいと思います。

たとえば、Button1という名前のコントロールを使用したい場合、これは正常に機能します。

function doStuffToButton1Control()
{
    var buttonControl = document.getElementById('<%= Button1.ClientID %>');
    //do stuff with buttonControl
}

しかし、コントロール名を動的にしようとするとエラーが発生します。次のように、ClientID呼び出しをつなぎ合わせようとしています。

function doStuffToGenericControl(controlName)
{
    var dynamicControl = document.getElementById('<%= ' + controlName + '.ClientID %>');
    //do stuff with dynamicContorl
}

文字列を作成するときに二重引用符または一重引用符を使用しようとしましたが、エラーは常に「文字列リテラルの文字が多すぎます」または「文字リテラルの文字が多すぎます」です。コントロールが存在し、名前が正しく渡されます(によってテストされますalert(name))。

これを回避するためのより良い方法はありますか、それとも私は明らかな何かを見逃していますか?

ありがとう!

更新:この関数はマスターページにあります。任意の数の子ページがそれを呼び出します。たとえば、ある子ページに、次のように呼び出すASPコントロールがあるとします。

<asp:LinkButton ID="Button2" runat="server" OnClientClick="doStuffToGenericControl('Button2')">...</asp:LinkButton>

しかし、別のページには、それを呼び出すこのASPコントロールがある場合があります。

    <asp:LinkButton ID="Button4" runat="server" OnClientClick="doStuffToGenericControl('Button4')">...</asp:LinkButton>

MainContent_Button2ただし、これらのコントロールのIDは、レンダリング時にASP.NETによって変更されることが多いため、たとえば、単なるの代わりに、のように表示されますButton2。これを回避するために、私は伝統的に使用<%= Button1.ClientID %>していましたが、この1つの関数を任意の数のコントロールで使用できるようにしたいので、少し問題があります。

アップデート2:必要なものを入手するために電話とthis一緒に使用することができました。getAttribute(明らかに、これは、参照しているコントロールがクリックしているコントロールである場合にのみ機能しますが、それが必要なものです)次のようになります。

function doStuffToGenericControl(controlName)
{
     var controlID = controlName.getAttribute('id');
     var control = document.getElementById(controlID);
     //do stuff with control
}
4

3 に答える 3

1

'<%= Button1.ClientID %>'は、asp.netページレンダリングでコントロールIDに置き換えられたものです。

ただし、クライアント側で変数を渡す場合は、idを渡し、%scopsなしで使用する必要があります

だからこれを試してみてください

function getGenericControl(control)
{
    var dynamicControl = control;
    alert(dynamicControl);
    //do stuff with dynamicContorl
}

アップデート

<%= ClientID%>を使用して上記のメソッドのパラメーターを生成できるため、このようにOnClientClicksを変更して、上記のメソッドを使用するだけです。

<asp:LinkButton ID="Button2" runat="server" OnClientClick="doStuffToGenericControl(this)">...</asp:LinkButton>
于 2012-11-27T20:06:12.497 に答える
1

コントロール名を渡すのではなく、次のような関数でこれを渡して、コントロール自体を渡してみませんか。

  <asp:LinkButton ID="Button2" runat="server" OnClientClick="doStuffToGenericControl(this)">...</asp:LinkButton>

そしてあなたの関数は次のようになります:

function getGenericControl(control)
{
    var dynamicControl = control;
    alert(dynamicControl.id);
    //do stuff whatever you want with dynamicContorl
}
于 2012-11-29T13:47:09.240 に答える
0

可能であれば、クラスを使用することを強くお勧めします。

var elems = document.getElementsByTagName('*'), i;
    for (i in elems) {
        if((' ' + elems[i].className + ' ').indexOf(' ' + matchClass + ' ')
                > -1) {
            elems[i].innerHTML = content;
        }
    }
于 2012-11-27T20:08:40.867 に答える