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
}