第二次单击 updatePanel 内的按钮,事件不会在 jQuery 中触发
在我的 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')
,之后就没有更多警报消息了。
In my aspx file, I have:
<asp:UpdatePanel ID="UpdatePanel3" UpdateMode="Always" runat="server">
<ContentTemplate>
<asp:Button ID="Button1" runat="server" Text="Button" />
</ContentTemplate>
</asp:UpdatePanel>
In my JavaScript file I have:
$('#ctl00_ContentPlaceHolder1_Button1').click(function (e) {
alert('hello');
});
But only the first time click on the button, I got alert('hello')
, and no more alert messages afterwards.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
当
UpdatePanel
执行异步回调时,您将丢失 jquery 事件注册,因为面板的内容被完全替换。您可以通过在回调期间向脚本管理器添加脚本注册来执行更多 JavaScript 来重新连接。像这样的事情应该让你关闭(在按钮的服务器端点击处理程序中):
When the
UpdatePanel
does its asynchronous callback, you lose your jquery event registration, because the contents of the panel get completely replaced.You can execute more JavaScript to re-wire things up by adding a script registration to the script manager during your callback. Something like this should get you close (in your button's server-side click handler):
我想知道为什么您的选择器为#ct_100_ContenPlaceHolder1_Button1。我将其切换为#Button1,它似乎对我来说工作得很好。
I'm wondering why you have your selector as #ct_100_ContenPlaceHolder1_Button1. I switched it to #Button1 and it appeared to work fine for me.
对于动态内容,请使用 jQuery 的 .live() 方法。
另外,我建议使用类而不是 ID。使用 ID 很容易受到影响 ASP.NET 容器/控件结构的任何代码更改的影响:
For dynamic content, use jQuery's .live() method.
Also, I'd recommend using a class instead of the ID. Using the ID is fragile to any code changes which affect the ASP.NET container/control structure: