2009-05-07 12 views
1

私はクライアントで次のHTMLを生成するWebユーザーコントロールを持っています。javascriptとasp.netのWebユーザーコントロール

JavaScriptを使用して特定のRadioButtonコントロールを参照したいと考えています。

RadioButton IDがasp.netによって生成されるため、これを行う方法がわかりません。例えば

Iは、ラジオボタンID = 1_RadioButton

asp.netは、IDを生成与える= ctl00_ContentPlaceHolder1_Material_1_RadioButton

がどのようにこのJavaScriptコードは、ラジオボタンコントロールを見つけることができますか?

<script type="text/javascript"> 
     $(document).ready(function() { 
      if (document.getElementById("1_RadioButton").checked) { 
       $("#1_other").hide(); 
      } 
     });  
    </script> 

以下は、asp.netがクライアント用に生成するものです。

<input id="ctl00_ContentPlaceHolder1_Material_1_RadioButton" type="radio" name="ctl00$ContentPlaceHolder1$Material$Academic" value="1_RadioButton" onclick="javascript:$('#1_other').show('fast');" /> 

    <label for="ctl00_ContentPlaceHolder1_Material_1_RadioButton">Yes</label> 

    <input id="ctl00_ContentPlaceHolder1_Material_2_RadioButton" type="radio" name="ctl00$ContentPlaceHolder1$Material$Academic" value="2_RadioButton" checked="checked" onclick="javascript:$('#1_other').hide('fast');" /> 

    <label for="ctl00_ContentPlaceHolder1_Material_2_RadioButton">No</label> 

    <input id="ctl00_ContentPlaceHolder1_Material_3_RadioButton" type="radio" name="ctl00$ContentPlaceHolder1$Material$Academic" value="3_RadioButton" onclick="javascript:$('#1_other').hide('fast');" /> 

    <label for="ctl00_ContentPlaceHolder1_Material_3_RadioButton">Uncertain</label> 

    <div id='1_other'> 
     <input name="ctl00$ContentPlaceHolder1$Material$4_TextBox" type="text" value="bbb chabng" id="ctl00_ContentPlaceHolder1_Material_4_TextBox" /> 
    </div> 

答えて

6

そのコードが.aspxのファイルが使用中の場合<% = MyRadioButton.ClientID%>その場所とASP.NETのレンダリングエンジンで適切にあなたのためのIDをレンダリングします。

更新:たとえば

<script type="text/javascript"> 
    $(document).ready(function() { 
     if ($get("<%= MyRadioButton.ClientID %>").checked) { 
      $("#1_other").hide(); 
     } 
    });  
</script> 
+0

ありがとう... 私は 'Microsoft JScript実行時エラー:オブジェクトが必要です'と表示しています いくつか私は別の何か間違っている必要があります。 私は正しい方向に私を指摘していただきありがとうございます。 – TonyAbell

+0

私の問題は、私がこれらのコントロールを動的に作成していたことでした。私は検索/ Control.ClientIDでControl.IDと置き換える必要があるjavascriptを生成するとき。すべての作品は今。 – TonyAbell

1
var radioButton = document.getElementById("<%= 1_RadioButton.ClientID %>"); 

そしてそこから行きます。注 - 私は引用符について肯定的ではありません。

-1

私は書かれていたblog post on how to do this

So say you have a label control on your page:

The generated output of the html and the ID of that control might look like this:

だけで静的( clientidmode="static")へのWebコントロールの clientidmode設定し、 asp.netがあなたの IDとして維持することを確認することができ、非常に簡単な
<span id="ctl00_ContentPlaceHolder1_Label1"></span> 

Unfortunately the generated ID of ct100_ContentPlaceHolder1_Label1 isn't always going to be the same from build to build. So trying to select it like this:

$("#ct100_ContentPlaceHolder1_Label1").hide();

will eventually break and it won't hide the label control.

The trick is to use ASP.NET inside the jQuery selector. Label1.ClientID will return the generated ID everytime. We combine ASP.NET and jQuery into one line like this:

$("#<%= Label1.ClientID %>").hide();

This will get the generated ID of the Label control everytime.

-1

デザイナーのUIに表示されます。

+0

しかし、ここで問題となるのは、ClientIDModeは.NET 4から入手可能です.Net 3.5を使用する場合はどうすればいいですか。 – tesicg

+0

これは、重複するコントロール名を許可する可能性のある問題も示しています。 Webコントロールやマスターページなどの「純粋な」aspx以外の技術を使用している場合は、コントロールIDが重複し、予期しない動作が発生する危険性があります。これは、複数の開発者が異なるコンポーネントで作業している場合に特に当てはまります。 –

関連する問題