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

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

要解决此问题,您需要做两件事之一。更难但更完整的答案是使用转发器的 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 回答