在我的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的.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) { ... }
我想知道为什么你的选择器为#ct_100_ContenPlaceHolder1_Button1。我把它切换到#Button1,它似乎对我很好。
当UpdatePanel
执行其异步回调时,您将丢失jquery事件注册,因为面板的内容将被完全替换。
您可以通过在回调期间向脚本管理器添加脚本注册来执行更多JavaScript以重新连接。这样的事情应该让你关闭(在你的按钮的服务器端点击处理程序):
ScriptManager.RegisterStartupScript(
this,
GetType(),
"AnyStringYouWant",
"$('#ctl00_ContentPlaceHolder1_Button1').click(function (e) {alert('hello');});",
true);