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

时间:2010-08-06 14:55:17

标签: jquery asp.net-ajax updatepanel autopostback

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

3 个答案:

答案 0 :(得分: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) { ... }

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

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

ScriptManager.RegisterStartupScript(
    this,
    GetType(),
    "AnyStringYouWant",
    "$('#ctl00_ContentPlaceHolder1_Button1').click(function (e) {alert('hello');});",
    true);