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