2011-05-05 97 views
2

我有一个更新面板,但它似乎是从我的一个输入去除类一旦更新的Ajax/Asp.Net更新面板问题

这里是第一次加载代码

<input type="text" class="txt1 hasDatepicker" id="txt1" name="txt1"> 

而这里的更新运行后

<input type="text" class="txt1" id="txt1" name="txt1"> 

下面是运行客户端jQuery的代码

$(function() { 
    $(".txt1").datepicker({ dateFormat: 'D d M yy' }); 
}); 

它似乎只是在更新运行后删除hasDatepicker类,并导致问题。

任何想法为什么这样做?

+0

由任何机会加入在客户端的hasDatepicker类? – Menahem 2011-05-05 13:27:50

+0

@Menahem是的 - 我不明白为什么一旦更新运行它不会再添加它? – 2011-05-05 13:35:02

+0

看起来像客户端脚本不运行afetr ajax回发,也许是因为什么穆罕默德sais ... – Menahem 2011-05-05 13:58:13

回答

3

jQuery就绪事件只会在页面首次加载时触发。它不检测AJAX更新,甚至从jQuery本身调用,因为该页面已经存在。

但是,在服务器上有一个和Page_Load类似的方法,如果它存在于JavaScript全局作用域中,一旦加载页面就会调用 - 在ASP.NET中,这是第一次或部分回发/异步更新/ ajax刷新。

名称略有不同,以匹配JavaScript的约定:

function pageLoad(){ 
    $(".txt1").datepicker({ dateFormat: 'D d M yy' }); 
} 

试试吧,告诉我的意见,如果它不工作...

对方回答(得到一个脚本管理器参考然后调用add_pageLoaded()并传递一个函数)就像在ServerSide中,当你在服务器端执行this.Load += new ....,而这个是Page_Load版本(默认情况下启用事件连线)。当然,我的意思是他们在客户端的对应不完全一样。所以,两者都很好,两者都应该可以工作,但如果您有多个加载事件处理程序,则第二种方法可能很有用,这可能会使事情变得比所需要的复杂。

+0

,很好用 - 谢谢 – 2011-05-05 14:09:22

1

您将需要使用PageRequestManager,该页面需要ScriptManager。你可以把它声明为<asp:ScriptManager ID="ScriptManager1" runat="server"></asp:ScriptManager>,然后在实例化PageRequestManager为:

<script type="text/javascript"> 
    var prm = Sys.WebForms.PageRequestManager.getInstance(); 
    prm.add_pageLoaded(SomeFunction); 
    prm.add_pageLoaded(function() {}); 

    function SomeFunction() {} 
</script> 
+2

当然,他有一个脚本管理器或其他UpdatePanel不会工作:) – Meligy 2011-05-05 14:04:37