第二次单击updatePanel内的按钮,事件不会在jQuery中触发

问题描述 投票:2回答:3

在我的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'),之后没有更多的警报信息。

jquery asp.net-ajax updatepanel autopostback
3个回答
2
投票

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

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

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

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

$('.performsMyClickAction').live('click', function (e) { ... }

0
投票

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


0
投票

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

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

ScriptManager.RegisterStartupScript(
    this,
    GetType(),
    "AnyStringYouWant",
    "$('#ctl00_ContentPlaceHolder1_Button1').click(function (e) {alert('hello');});",
    true);
© www.soinside.com 2019 - 2024. All rights reserved.