2

在我的 aspx 文件中,我有:

<asp:UpdatePanel ID="UpdatePanel3" UpdateMode="Always" runat="server">
    <ContentTemplate>
       <asp:Button ID="Button1" runat="server" Text="Button" />
    </ContentTemplate>
</asp:UpdatePanel>

在我的 JavaScript 文件中,我有:

$('#ctl00_ContentPlaceHolder1_Button1').click(function (e) {
        alert('hello');
    });

但只有第一次点击按钮,我得到了alert('hello'),之后没有更多的警报消息。

4

3 回答 3

2

对于动态内容,使用 jQuery 的.live()方法。

$('#ctl00_ContentPlaceHolder1_Button1').live('click', function (e) {
    alert('hello');
});

另外,我建议使用类而不是 ID。使用 ID 对于影响 ASP.NET 容器/控件结构的任何代码更改都是脆弱的:

<asp:Button ID="Button1" runat="server" Text="Button" class="performsMyClickAction" />

$('.performsMyClickAction').live('click', function (e) { ... }
于 2010-08-06T15:16:29.733 回答
0

我想知道为什么你的选择器是#ct_100_ContenPlaceHolder1_Button1。我将它切换到#Button1,它似乎对我来说很好用。

于 2010-08-06T15:05:49.973 回答
0

UpdatePanel它进行异步回调时,您将丢失 jquery 事件注册,因为面板的内容被完全替换。

您可以通过在回调期间向脚本管理器添加脚本注册来执行更多 JavaScript 以重新连接。这样的事情应该让你关闭(在你的按钮的服务器端点击处理程序中):

ScriptManager.RegisterStartupScript(
    this,
    GetType(),
    "AnyStringYouWant",
    "$('#ctl00_ContentPlaceHolder1_Button1').click(function (e) {alert('hello');});",
    true);
于 2010-08-06T15:06:26.480 回答