jQuery获取ASP.NET控件匹配相似ID的问题及替代方案咨询
问题解答
这是完全正常的现象!你用的[id*='txtVat']是jQuery的包含型属性选择器,它会选中所有ID里包含"txtVat"字符串的元素——txtVatRate的ID里刚好包含"txtVat"前缀,所以自然会被一起选中。
如果你不想用#txtVat选择器(毕竟ContentPlaceHolder会让ASP.NET生成带前缀的客户端ID,直接写#会找不到),可以试试下面几种靠谱的方法:
使用结尾匹配的属性选择器
因为ASP.NET生成的客户端ID通常是[ContentPlaceHolderID]_[你的控件ID]格式,控件ID会作为结尾部分,所以用[id$='txtVat']就能精确匹配到ID以"txtVat"结尾的元素,完美避开txtVatRate:var vat = $("[id$='txtVat']");给控件添加CSS类
这种方法更直观也更易维护,直接给目标ASP.NET控件加上CssClass属性:<asp:TextBox ID="txtVat" runat="server" CssClass="vat-textbox"/> <asp:TextBox ID="txtVatRate" runat="server" />然后用类选择器就能精准选中:
var vat = $(".vat-textbox");利用ClientIDMode(ASP.NET 4.0+)
如果你能控制控件的ClientIDMode,可以设置为Static,这样ASP.NET就不会修改客户端ID,控件的客户端ID会和你设置的ID完全一致:<asp:TextBox ID="txtVat" runat="server" ClientIDMode="Static"/>这时候你甚至可以用
#txtVat选择器,或者用精确属性匹配[id='txtVat'],不过要注意页面内不能有重复ID哦。
内容的提问来源于stack exchange,提问作者Danny
相关产品推荐
相关产品推荐

