javascript - 如何在 ASP.NET 中引用 ItemTemplate 中的文本框
问题描述
我有以下 Jquery 功能
<script type='text/javascript'>
$(function () {
var msgbox = $("#status");
$( '<%= txtCurrBlk.ClientID %>').on('keyup', function () {
alert("The paragraph was clicked.");
$.ajax({
type: "POST",
url: "MonthlyCopyReadings.aspx/readingTextChanged",
data: "{}",
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function(msg) {
msgbox.html(msg.d);
}
});
});
});
txtCurrBlk 来自以下代码块
<asp:Repeater runat="server" ID="rptMeterReads" >
<ItemTemplate>
<tr>
<td><%#Eval("serialNum") %></td>
<td style="display:none"><asp:Label ID="lblMfdId" runat="server" Text='<%#Eval("mfdId") %>'/></td>
<td><%#Eval("contractNum") %></td>
<td><%#Eval("model") %></td>
<td><asp:HyperLink ID="HyperLink2" runat="server" NavigateUrl='<%#Eval("ipAddress") %>'><%#Eval("ipAddress") %></asp:HyperLink></td>
<td><%#Eval("password") %></td>
<td><asp:Label ID="lblPrevBlk" runat="server" Text='<%#Eval("previousBlack") %>' /></td>
<td><asp:TextBox ID="txtCurrBlk" runat="server" style="width:80px" Text='<%#Eval("currentBlack") %>' AutoPostBack="true" /></td>
<td><asp:Label ID="lblTotalBlk" runat="server" /> </td>
<td><asp:Label ID="lblPrevClr" runat="server" Text='<%#Eval("previousColour") %>' /></td>
<td><asp:TextBox ID="txtCurrClr" runat="server" style="width:80px" Text='<%#Eval("currentColour") %>' Autopostback="true" /></td>
<td><asp:Label ID="lblTotalClr" runat="server" /> </td>
<%--<td><asp:CheckBox ID="isColor" Checked='<%#Eval("") %>' runat="server" ReadOnly="True"/></td>--%>
</tr>
</ItemTemplate>
</asp:Repeater>
我发现如果我将它放在 itemTemplate 中,我会得到“txtCurrBlack 在其当前上下文中不存在”。有没有办法可以正确引用该文本框?
解决方案
在您的问题中使用ClientID
like<%= txtCurrBlk.ClientID %>
不起作用,因为模板内的每个服务器控件都分配有不同的 ID(请注意,重复或动态创建的 HTML 元素不能有重复的 ID),并且您需要使用FindControl
在后面的代码中获取控件,如这个:
<%= Container.FindControl("txtCurrBlk").ClientID %>
在转发器控件中获取文本框元素的最简单方法是设置CssClass
如下属性:
<asp:TextBox ID="txtCurrBlk" runat="server" style="width:80px" CssClass="currBlk" Text='<%#Eval("currentBlack") %>' AutoPostBack="true" />
由于中继器内的文本框有很多元素 ID,我们不能使用id
属性在它们上绑定事件。使用上面提到的 CSS 类名作为 jQuery 选择器:
// n = element index
$('.currBlk').on('keyup', function () {
alert("The paragraph was clicked.");
// other stuff
}
提示:eq()
如果要将事件与具有指定索引的 HTML 元素绑定,可以使用 jQuery方法。
类似问题:
推荐阅读
- c++ - 防止调用某些 std 函数
- spring-mvc - 请帮助解释 Lombok 的 @AllArgsConstructor 和 spring 的 @RestController 的奇怪组合
- python-3.x - 如何修复错误:命令错误退出状态 1:python setup.py egg_info 安装 geograpy 包
- sql-server - 从 SQL Server Management Studio 连接到数据库服务器时出错
- powershell - 缺少双面 WIA 扫描属性
- spring-boot - 如何使用 Spring Boot jmsListener 为失败的消息配置 DLQ?
- java - 获取Java中类的字段名称
- zapier - 在 zapier 中使用格式化程序高级自定义字段进行日期格式化
- sql - 一段时间内的平均速度很慢
- java - 无法使用 ByteBuddy 代理转换类