我无法弄清楚这个选择器如何正确选择txtUsername元素:
ASPX:
<asp:Content ID="Content1" ContentPlaceHolderID="body" runat="Server">
...
<div class="copy" style="float: left; width: 210px">
<span class="copy" style="float: left; width: 210px">
<asp:TextBox ID="txtUserName" runat="server" CssClass="ffield copy" Style="width: 198px;"></asp:TextBox>
</span>
</div>
jQuery的:
var username = $('#body_txtUserName').val();
asp:TextBox的ID是txtusername
而不是body_txtUserName
,我唯一能想到的是txtusername
嵌套在asp:Content
元素中{ {1}}
如果这是真的,那么下划线的重要性是什么?我无法找到有关jQuery选择器
的语法的任何文档答案 0 :(得分:2)
ASP.NET正在运行时修改ID,最好不要尝试猜测它。相反,您应该修复ID,使用生成的ID,或者聪明地了解您在客户端选择的内容。你的选择:
如果您的脚本位于aspx页面本身,您应该可以像这样使用ClientID:
$('#<%=txtUserName.ClientID %>')
如果您完全确定此控件是唯一一个在页面上使用此ID的控件,请使用此控件属性修复ID:
ClientIDMode="Static"
$('#txtUserName')
您可能不应该依赖于此,但生成的ID通常以您在服务器端使用的任何ID结束。所以你可以尝试使用“结束”jQuery选择器:
$('input[id$="txtUserName"]')
同样,这不是一个好主意,因为它依赖于ID生成如何工作的假设。
分配另一个CSS类并使用它。您不需要在样式表中定义此类,只能将此技术用于选择目的:
CssClass="ffield copy userNameText"
$(".userNameText")
答案 1 :(得分:1)
它与jquery无关。这是因为客户Id
和实际Id
可能不同。在您的情况下,body_txtUserName
是客户Id
。尝试:
$('#<%= txtusername.ClientID %>');
答案 2 :(得分:0)
这里有一些选项,具体取决于您实际的Javascript所在位置。
ASPX文件中的Javascript
这个很简单,因为您可以使用ClientID
属性来解析Control的相应客户端ID:
// This will resolve the client-side ID as expected
$('#<%= txtUserName.ClientID %>');
如果您的jQuery代码包含在外部Javascript文件中,这将不起作用。
外部文件中的Javascript
如果您的Javascript包含在外部文件中,您可以考虑使用与以相应ID结尾的元素匹配的the jQuery "ends-with" selector $=
:
$('[id$="txtUserName"]')