asp.netのrepeaterで出力したコントロールにjavascriptでアクセスする

ASP.NETRepeaterで動的に出力したコントロールにjavascriptでアクセスする方法を紹介します。

例として、登録ボタン押下時に、選手名のテキストボックスが未入力の場合はアラートを表示するようにします。

選手一覧
選手名国籍怪我キャプテン

まずはapsxファイルに更新ボタン押下時に必須チェックをするjavascriptのファンクションを定義します。

<script>
  //更新前の入力チェックを行います
  function checkMeisai(){
    return true;
  }
</script>

<!--javascriptでアクセスするためにtable要素にidを付与します-->
<table id="tblMeisai">
  <thead>
    <tr>
      <td></td>
      <td>選手名</td>
      <td>国籍</td>
      <td>怪我</td>
      <td>キャプテン</td>
    </tr>
  </thead>
  <tbody>
    <asp:Repeater ID="repeater1" runat="server">
      <ItemTemplate>
        <tr>
          <td><input type="button" id="btnDetail" value="詳細" runat="server" /></td>
          <td><input type="text" id="txtName" runat="server" /></td>
          <td><select id="selCountry" runat="server"></select></td>
          <td><input type="checkbox" id="chkInjure" runat="server" /></td>
          <td><input type="radio" id="rdoCap" runat="server" /></td>
        </tr>
      </ItemTemplate>
    </asp:Repeater>
  </tbody>
</table>
<input type="button" value="更新" onclick="return checkMeisai();">

onclickreturnの値がtrueの場合のみ処理を継続します。

javascriptでtableの要素にアクセスする

javascriptで要素にアクセスする場合はgetElementById('取得したいコントロールのID')でアクセスすることが多いですが、Repeaterで動的に出力した場合はコントロールのIDがどのような値になるのかわからないので、getElementsByTagName()でアクセスします。

最近のブラウザであればquerySelectorなどを使用したほうが簡単に取得できますが、古いブラウザにも対応するためにgetElementsByTagNameを例として紹介しています。

htmlの要素全体に対してgetElementsByTagName()を行うと、取得したいコントロール以外のコントロールも取得してしまうので、以下のようにtd要素まで特定してからgetElementsByTagName()でアクセスします。

//更新前の入力チェックを行います
function checkMeisai(){
  //table要素を取得します
  var tbl = document.getElementById('tblMeisai');
  var row; //tr要素を格納する
  var cell; //td要素を格納する
  //tbl.childrenはthead,tbody
  //tbl.children[1].childrenがtbodyのtr
  for(var i = 0; i < tbl.children[1].children.length; i++) {
    row = tbl.children[1].children[i]; //trを格納する
    cell = row.cells[1]; //選手名テキストボックスのあるtdを格納する(左から2番めのtd)
    //cellの中でinputタグの要素を検索する
    if(cell.getElementsByTagName('input')[0].value === ''){
      alert('選手名を入力してください。');
      return false;
    }
  }
  return true;
}

関連記事

  • asp.netのrepeaterで表示・編集・登録処理を行う その2

    aspxファイルに定義したrepeaterの中のコントロールのIDはサーバ処理で使うためのIDであって、レスポンスされるコントロールのIDではありません。なので、ID=txtNameのテキストボックス...


  • asp.netのrepeaterで表示・編集・登録処理を行う その1

    asp.netのWEBサーバコントロールのrepeaterコントロールを使用し、データの表示・編集・登録処理の流れの実装例を紹介します。具体的には、DBに登録されているデータをrepeaterコントロ...


  • asp.net|repeaterで出力したラジオボタンを1つのみ選択する方法

    1つだけ選択できるようにするには、サーバ処理で変更されてしまったNAME属性を同じにする必要があります。なのでクライアント側のロードイベントでラジオボタンのNAME属性を変更します。


  • asp.netのrepeaterで出力時にjavascriptのイベントを定義する

    apsxファイルに詳細ボタンと、詳細画面を起動するjavascriptのファンクションを定義します。onclick属性(イベント)をaspxに定義してしまうと、引数で必要な行事の情報がわからないので、...


  • asp.netのポストバックの基本

    asp.netでは保持したいコントロールにrunat=server属性を指定してsubmitすると、自動的に内部処理でコントロールの値を復元してくれます。基本的にasp.netでは、runat=ser...


  • asp.netのhtmlサーバコントロールの基本

    asp.netのhtmlサーバコントロールの基本の基本的な考え方ついて説明します。htmlサーバコントロールを使えば、サーバ処理でhtmlの要素(コントロール)にアクセスできるようになります。フォーム...


  • asp.netのイベントの基本と注意事項

    asp.netではsubmitコントロールにrunat="server"属性を指定してsubmitするようにすれば、サーバ処理ではフォームアプリと同じようにイベントのファンクション...


  • asp.netの基本・aspとの違い

    classic aspとasp.net(aspx)の違いやaspx.netの基本的な考え方ついて説明します。ここまでaspを用いてWEBアプリの基本を説明してきましたが、ここまでのサンプルコードを見て...


  • 地附山で自然に触れ合い心も体もリフレッシュ

    おすすめトレッキングスポット、長野県長野市にある地附山が気軽に行けて景色も素晴らしかったので紹介します。


  • 須坂市の絶景スポット米子大瀑布の紹介

    長野県須坂市の米子大瀑布の壮大な自然が絶景でしたので紹介します。米子大瀑布は、須坂市の山中にある2つの滝です。米子大瀑布にあるこれらの滝は日本の滝百選に選ばれています。また、滝だけでなく周辺の岩壁は壮...