在ASP.net/C#应用程序中。 我正在使用更新面板和其中的占位符来动态加载控件
<asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional">
<Triggers>
<asp:AsyncPostBackTrigger ControlID="LinkButton1" EventName="Click"/>
</Triggers>
<ContentTemplate>
<asp:PlaceHolder ID="PlaceHolder1" runat="server">
</asp:PlaceHolder>
</ContentTemplate>
</asp:UpdatePanel>
当我点击LinkButton1时,我在PlaceHolder中加载了一个用户控件:
protected void LinkButton1_Click(object sender, EventArgs e)
{
PlaceHolder1.Controls.Clear();
MyControl C;
C = (MyControl1 )LoadControl("Controls/MyControl.ascx");
PlaceHolder1.Controls.Add(C);
}
我所拥有的所有控件都正确加载。
但问题是:
我有一个控件,当我点击div时,使用Javascript和Jquery创建一个下拉动画。 通过Normal PostBack加载到页面上时,此控件可正常工作 但是当我在更新面板中使用部分回发加载它时,它会加载但javascript停止工作(不再下拉动画和其他东西)
如何通过部分回发加载控件时使它们工作?
答案 0 :(得分:1)
我认为使用Jquery“Live”可能是您需要的答案,这将监控DOM的变化。
$(“{YOURQUERY}”)。live(“click”,function(){alert(“Goodbye!”);});
查看jquery文档以获取更多信息。
答案 1 :(得分:0)
我认为您的动画正在$(document).ready()事件中注册。然后它注册所有div,特定的动画。 如果您对updatepanel进行回发,则不会触发文档就绪事件,因此会注册动画。您应该在更新面板中回发后再次自己完成。
答案 2 :(得分:0)
我的猜测是你的动画下拉是在dom准备就绪时执行的。因此,您的初始页面加载会在下拉列表中的任何位置设置动画。
使用部分帖子返回其唯一加载的部分,因此未设置动画。因为它不是最初准备好的Dom的一部分。
您需要在返回该部分帖子时触发一些javascript,以运行您可能需要设置动画的相同功能。
修改强>
How to control which JavaScript gets run after UpdatePanel partial postback endRequest?
应该在更新面板返回后帮助您执行javascript。
答案 3 :(得分:0)
当你执行.bind()时,你只在给定时刻连接DOM中存在的元素的事件,即执行.bind()时。您通过部分回发异步加载的控件在document.ready中不存在,这就是您的事件不起作用的原因。
你应该使用live或delegate,或者更好的是,如果你使用的是jQuery 1.7或更高版本,你应该使用新的on-function:
$(function(){
$('placeholder-selector').on('click' , 'your-clickable-selector', function(){
//do your animation here
});
});