用于asp.net中嵌套元素的jQuery ID选择器?

时间:2016-07-14 14:54:44

标签: javascript c# jquery css asp.net

我无法弄清楚这个选择器如何正确选择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选择器

的语法的任何文档

3 个答案:

答案 0 :(得分:2)

ASP.NET正在运行时修改ID,最好不要尝试猜测它。相反,您应该修复ID,使用生成的ID,或者聪明地了解您在客户端选择的内容。你的选择:

  1. 如果您的脚本位于aspx页面本身,您应该可以像这样使用ClientID:

    $('#<%=txtUserName.ClientID %>')
    
  2. 如果您完全确定此控件是唯一一个在页面上使用此ID的控件,请使用此控件属性修复ID:

    ClientIDMode="Static"
    
    $('#txtUserName')
    
  3. 您可能不应该依赖于此,但生成的ID通常以您在服务器端使用的任何ID结束。所以你可以尝试使用“结束”jQuery选择器:

    $('input[id$="txtUserName"]')
    
  4. 同样,这不是一个好主意,因为它依赖于ID生成如何工作的假设。

    1. 分配另一个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"]')