jQuery和ASP.NET控件问题

时间:2009-05-20 15:11:44

标签: asp.net javascript jquery

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

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

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

我到目前为止:

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

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

有什么想法吗?

更新

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

8 个答案:

答案 0 :(得分:5)

只需在jQuery中连接click事件。

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

另外,请确保您不只是将您键入的ID放入jQuery中的控件中。 ASP.Net使用与给定控件不同的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() { ... });

编辑:

我研究了使用&lt;%= ...%&gt;方法,你必须让你的javascript IN ASPX / ASCX文件本身才能工作。因此,我坚持使用正则表达式方法。

答案 1 :(得分:2)

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

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

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

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

答案 2 :(得分:2)

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

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

答案 3 :(得分:1)

答案 4 :(得分:0)

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

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

或转到视图源并复制id名称并将其粘贴到代码中,或者只使用css类选择器:

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

答案 5 :(得分:0)

由于您提到了Sharepoint,因此您可能会对EndUserSharepoint专注于集成jQuery with Sharepoint的系列感兴趣。作者讨论了让jQuery操纵webparts。

答案 6 :(得分:0)

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

HTML中出现的控件的ID是什么?

答案 7 :(得分:0)

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

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