如何让javascript在更新面板中执行

时间:2009-11-10 17:25:22

标签: asp.net javascript jquery-plugins updatepanel

我有一个包含表格的更新面板,我在按钮点击上添加控件行。添加的控件之一是用户控件,它是一个日期选择器。在那个用户控件里面我有一个文本框,我有JQuery,它将JQuery UI DatePicker插件应用到它,从而将它变成一个datepicker。如果将用户控件动态加载到页面上,这不是问题,但是,如果在更新面板内的异步回发上完成,则javascript不会触发,因此文本框是渲染但没有所有jquery datepicker功能。这是DatePicker.ascx中的一些代码:

$(function() {
       //reset the localization
        $.datepicker.setDefaults($.extend($.datepicker.regional['']));
        $("#<%=txtDate.ClientID%>").datepicker({ dateFormat: 'mm/dd/yy', showOn: 'button', buttonImage: '/images/calendar.gif', buttonImageOnly: true, altField: '#<%=txtDate.ClientID%>' });

}

因此,当在异步回发上动态加载控件时,不会触发此jquery。那么我怎样才能做到这一点呢?

3 个答案:

答案 0 :(得分:2)

Check this Page 在DatePicker上查找会话 它说ASP.NET AJAX UpdatePanel会擦除DOM,因此负载不会触发。 帖子说你可以使用EndRequest处理程序或pageLoad快捷方式,但是我想如果你不能用ScriptManager注册javascript。

希望这有帮助。

答案 1 :(得分:1)

在响应中呈现脚本时,它会执行以下操作:呈现脚本。在呈现页面期间,首先呈现脚本,并且在执行此代码时已经发生过。

Microsoft为此提出了一个解决方案,即通过ScriptManager.RegisterClientScriptBlock注册脚本块,然后ScriptManager将在页面加载后查看该脚本。

根据您的具体情况,可能会有所帮助,也可能没有帮助。或者,在中间体中:只有一些变通方法可能会有所帮助。从您的评论中,我可以想到我可能考虑使用的一种解决方法:

在UserControl中添加GetClientScript方法,返回JavaScript。如果在常规页面加载时加载UserControl,则在当前呈现脚本的位置调用该方法。如果控件是在UpdatePanel回发中加载的,则使用该方法从控件获取脚本体,并将其注册到手头的ScriptManager中。在这种情况下,您还应该将参数传递回UserControl 而不是以再次注册脚本,通常是这样。

答案 2 :(得分:0)

在初始加载期间,DatePicker.ascx是否在页面顶部插入了javascript?然后该函数失败,因为尚未加载datepicker。然后将async上的datepicker加载到更新面板中,但不调用该函数。

相关问题