2011-05-05 96 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