2012-11-06 76 views
5

我目前正在嘗試爲位於AJAX UpdatePanel內的GridView使用「colResizable」。在第一次加載時,它運行良好,但每當UpdatePanel得到更新時,它就會停止。jQuery UpdatePanels初始化

我知道這是由pannel的全面刷新引起的,這意味着所有通過初始化添加的東西都不會被添加回來。

我已經試過了「add_endRequest」解決方案

var prm = Sys.WebForms.PageRequestManager.getInstance(); 
prm.add_endRequest(function() { 
    $(".GridViewStyle").colResizable({ liveDrag: true }); 
} 

但是,它被調用太早,不解決我的問題。

我讀過關於「.live()」的方法,但我不明白我如何使用它進行初始化。對於像「mouseover」這樣的事件,我看到它是如何使用的,而且非常簡單......但是,對於inits,我不明白。

我現在的動初始化行是:

$(document).ready(function() { 
    $(".GridViewStyle").colResizable({ liveDrag: true }); 
}); 

繼「鼠標懸停」爲例,但我無法弄清楚哪個事件掛鉤行動,如文檔不會列出像「加載什麼」。如果是這樣,我會用這樣的東西...

$(".GridViewStyle").live("load", function() { $(".GridViewStyle").colResizable({ liveDrag: true }); }); 

我已經四處搜尋,但還沒有找到適合我需要的東西。我對jQuery相當陌生,所以我可能不會使用正確的詞彙/概念。

回答

0

您可以使用PageRequestManagerpageLoaded事件代替endRequest。查看此事件文檔:

在頁面上的所有內容因同步回發或異步回發而刷新後引發。

此外,在此事件處理函數中,只有在UpdatePanel所在的GridView控件所在的位置創建或更新時,纔可以應用colResizable插件。這可以讓你避免可能由控制在一些其他的UpdatePanel提高

Sys.WebForms.PageRequestManager.getInstance().add_pageLoaded(initializeResizeable); 

function initializeResizeable(sender, args) { 
    var context = $(args.get_panelsCreated()).add(args.get_panelsUpdated()); 
    $(".GridViewStyle", context).colResizable({ liveDrag: true }); 
} 

而且每個異步回發冗餘插件初始化調用,這個腳本,您可以從的document.ready處理程序刪除插件初始化爲這個腳本會在第一頁加載以及每個異步回傳上執行

0

.live()不推薦使用,請儘量使用jQuery的.on()方法來代替:

$(document).on("change", $('.GridViewStyle'), function() { 
    $(this).colResizable({ liveDrag: true }); 
}); 

此外,您可能需要設置postbackSafe: true在初始化回發過程中保持列的寬度變化。