无法在转发器中访问自动填充的文本框

时间:2013-07-18 06:17:21

标签: javascript asp.net ajax

我正在尝试使用小型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>

1 个答案:

答案 0 :(得分:1)

您的问题似乎是您实际上没有针对任何“特定”文本框。转发器的每一行都会有一个这样的文本框,由于数据绑定的性质,这些文本框将始终只在运行时可用。

要解决此问题,您需要执行以下两项操作之一。更难但更完整的答案是使用转发器的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>