1

小さな JavaScript スクリプトを使用して、リピーターのテキスト ボックスにアクセスしようとしています。ユーザーがリストからオプションを選択すると、ajax オートコンプリートによって呼び出されます。

javascript がテキストボックス (ID=ContactID) にアクセスできないため、機能していません。理由はリピーターにあるからです。では、スクリプトを変更して、リピーターの特定のテキスト ボックスにアクセスするにはどうすればよいでしょうか。

<script type="text/javascript" >
    function OnContactSelected(source, eventArgs) {
    $get('<%# ContactID.ClientID %>').value = eventArgs.get_value();
    }
</script>

リピーターコード:

<asp:repeater ID="itemsRepeater" 
      OnItemDataBound="itemsRepeater_ItemDataBound" 
      runat="Server">
   <itemtemplate>
      <tr>
         <td>
          <asp:RadioButtonList runat="server"  DataSource="<%#         ((Outlet)Container.DataItem).OutletInformations %>" DataValueField="DateOfDelivery" DataTextField="DateOfDelivery" />        
         </td>
         <td>
            <asp:TextBox ID="ContactID" runat="server"/>
         </td>
      </tr>
   </itemtemplate>
</asp:repeater>
4

1 に答える 1

1

あなたの問題は、実際には「特定の」テキストボックスをターゲットにしていないことです。リピーターの行ごとにそのようなテキストボックスが 1 つあり、データバインディングの性質上、これらのテキストボックスは常に実行時にのみ使用できます。

これを修正するには、次の 2 つのいずれかを行う必要があります。難しいがより完全な答えは、リピーターの onItemDatabound イベントを使用して、このイベントの eventArgs から子コントロールをプルすることです。コード ビハインドで子コントロールを変更する場合は、これが唯一のオプションになります。

ただし、JavaScript からこれを行っており、(表向きは) このオートコンプリート機能をすべてのテキストボックスで実行したいので、テーブル行にクラスを与え、その中のレンダリングされた入力タグをターゲットにします。

.aspx:

<itemtemplate>
      <tr>
         <td>
          <asp:RadioButtonList runat="server"  DataSource="<%#         ((Outlet)Container.DataItem).OutletInformations %>" DataValueField="DateOfDelivery" DataTextField="DateOfDelivery" />        
         </td>
         <td class="autocomplete">
            <asp:TextBox ID="ContactID" runat="server"/>
         </td>
      </tr>
   </itemtemplate>

JS:

<script type="text/javascript" >
    function OnContactSelected(source, eventArgs) {
      var fields = document.querySelectorAll(".autocomplete input");
      for(var i = 0; i < fields.length; i++){
        fields[i].value = eventArgs.get_value();
      }
    }
</script>
于 2013-07-19T18:10:33.333 に答える