【问题标题】:jQuery and ASP.NET Control issuejQuery 和 ASP.NET 控件问题
【发布时间】:2009-05-21 10:46:10
【问题描述】:

如果我有一个呈现为带有 ID 的 html 控件的自定义 ASP.NET 控件,我正在尝试使用 jQuery 向输入控件添加一个属性。

但是,我遇到了一些问题:

首先,我的 jQuery 无法选择它。

到目前为止:

$(document).ready(function() {
  $(client id of the input control).attr('onclick', function () { alert('hey!'); });
});

似乎 jQuery 试图找到输入控件但找不到。

有什么想法吗?

更新:

通常,提供的解决方案会起作用,但由于这是一个 SharePoint Publishing .aspx 页面,因此不允许使用代码块...尝试其他解决方法。

【问题讨论】:

  • 您可能希望将 .click 或 .bind('click',...) 用于单击事件处理程序,而不是 .attr 命令

标签: asp.net javascript jquery


【解决方案1】:

只需在 jQuery 中连接点击事件。

$(document).ready(function() {
    $(id of the input control)click(function() {
        alert('hey!');
    });
});

另外,请确保您不只是将您输入的 ID 放入 jQuery 中的控件中。 ASP.Net 使用与您为控件提供的 ID 大不相同的 ID 呈现控件。在我运行的其中一个网站上,我有以下按钮:

<asp:Button ID="btnSignup" runat="server" Text="Sign Up" />

呈现的 HTML 中的 ID 不是 btnSignup,它实际上呈现为 ctl00_cpLeft_btnSignup。要使用 jQuery 选择该控件,您可以这样做:

$("input[id$='btnSignup'").click(function() { ... });

编辑:

$("input[id$='btnSignup'}").click(function() { ... });

您也可以选择使用:

$("#<%= btnSignup.ClientID %>").click(function() { ... });

编辑:

我研究过使用 方法,你必须让你的 javascript IN ASPX/ASCX 文件本身才能工作。因此,我会坚持使用正则表达式方法。

【讨论】:

  • 从未想过使用属性匹配选择器。 +1 代替
  • 我真的很想对这两种方法进行比较,看看哪个更快。
  • 格罗默,第一种方法还是选不上:( $("input[id$='btnSignup'").click(function() { ... });跨度>
【解决方案2】:

你用什么作为输入控件的ID?

您必须使用控件的 ClientID,而不是它的 ID。

【讨论】:

  • 是的,但由于这是客户端,我无权访问 ClientID。因此,目前,我只是渲染控件,然后对 ClientID 进行硬编码。
  • 是的,你必须解决这个问题。您可以使用 ClientScriptManager 添加一段 javascript 以在启动时运行(使用 RegisterStartupScript 方法)。
【解决方案3】:

您需要使用它的 ClientID。如果您的 ASP.NET 标记如下所示:

<uc:MyControl runat="server" ID="myControl1" />

您的 jQuery 选择器应如下所示:

$(document).ready(function() {
  $("<%=myControl1.ClientID%>").attr('onclick', function () { alert('hey!'); });
});

【讨论】:

    【解决方案4】:
    【解决方案5】:

    您的 ASP.NET 控件是在母版页还是用户控件中? ASP.NET 会在你的 ID 前面加上一堆标识符,以确保它是唯一的。

    在 HTML 中出来的控件的 ID 是什么?

    【讨论】:

    • 我先渲染控件,然后查看 ID 的 html 源代码并获取它。
    【解决方案6】:

    如果将呈现的 HTML 控件的 ID 设置为提供给 ASP.NET 控件的 ID,则需要了解 ASP.NET 如何处理控件 ID 命名空间。本质上,嵌套在控件中的每个控件都需要始终保证唯一的标识符。 ASP.NET 通过获取分配给控件的 ID 并在其前面加上包含该控件的每个控件的 ID 来维护这一点。因此,页面上的控件将包含一个 id 字符串,该字符串将上升到页面本身的表单。

    您不希望重新构建此客户端。相反,Control 定义了 ClientID,它将返回在客户端呈现的控件的 ID。将其嵌入到您的 jQuery 中,或者嵌入到 jQuery 可以看到的 javascript 变量中(如果您将 jQuery 放在单独的脚本文件中),您应该没问题。

    【讨论】:

      【解决方案7】:

      只是通知您,不需要 document.ready 部分,使用 asp.net 控件将 id 更改为与预期不同的东西,即 ct100.... 被抛出在它的开头,所以即使asp.net在开头抛出了损坏的代码,这种方式也会查找实际的ID名称,因为它会查找所有具有ID结尾的元素(*)与指定的文本。

      $(function() {
         $("*[id$='idofcontrol']".click(function() { alert('hey!'); });
      });
      

      或转到查看源并复制 id 名称并将其粘贴到您的代码中,或者直接使用 css 类选择器:

      $(function() {
            $('.myclassname').click(function() { alert('hey!'); });
      });
      

      【讨论】:

        【解决方案8】:

        既然您提到了 Sharepoint,您可能会对 EndUserSharepoint 上的这个系列感兴趣,该系列专注于集成 jQuery with Sharepoint。作者讨论了如何让 jQuery 来操作 webpart。

        【讨论】:

          猜你喜欢
          • 2010-12-14
          • 1970-01-01
          • 2011-09-04
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-09-27
          • 2010-12-20
          • 2015-12-01
          相关资源
          最近更新 更多