我有一個動態創建的JavaScript塊,它在頁面加載時執行。 JS在UpdatePanel中。在C#UpdatePanel更新後更新JavaScript
UpdatePanel更新時,我需要更新我的動態創建的JavaScript。這一切都正常工作,因爲當我查看生成的頁面源,我可以看到更新的JS。
我的問題是,頁面更新後,我需要手動重新執行JavaScript函數(因爲這通常在頁面加載時自動完成)。
我已經嘗試了多種方法:
Sys.WebForms.PageRequestManager.getInstance().add_pageLoaded(pageLoaded);
function pageLoaded(sender, args) {
var updatedPanels = args.get_panelsUpdated();
// check if Main Panel was updated
for (idx = 0; idx < updatedPanels.length; idx++) {
if (updatedPanels[idx].id == "PageContent_TabContent_UpdatePanel1") {
drawVisualization();
break;
}
}
}
或者:
Sys.WebForms.PageRequestManager.getInstance().add_endRequest(handleEndRequest);
function handleEndRequest(sender, args) {
drawVisualization();
}
但上述兩種方法只是執行舊版本的JavaScript,而根據生成的源代碼已經改變。
有什麼我錯過了,或者我可以嘗試另一種方法嗎?
UPDATE:
使用評論@Mehdi Maujood,我已經把工作解決方案:
function handleEndRequest(sender, args)
{
var updatedPanels = args.get_panelsUpdated();
for (idx = 0; idx < updatedPanels.length; idx++) {
if (updatedPanels[idx].id == "PageContent_TabContent_UpdatePanel1") {
var scripts = updatedPanels[idx].getElementsByTagName('script');
for(var i=0;i<scripts.length;i++) {
eval(scripts[i].innerHTML);
}
drawVisualization();
break;
}
}
}
Sys.WebForms.PageRequestManager.getInstance().add_pageLoaded(handleEndRequest);
這結合了How can I recall a javascript function after updatepanel update解答以及@ shatl對Rebinding events in jQuery after Ajax update (updatepanel)評論。
其實,我只是找到了一個更好的方法來執行從更新面板刷新呈現的javascript:HTTP:/ /stackoverflow.com/questions/1625791/how-can-i-recall-a-javascript-function-after-updatepanel-update ..這是你遇到的實際問題。 –
感謝您的評論。我在上面發佈的JS中遇到了問題,它說'panel'是未定義的。我想出了一個將你的例子與另一個例子合併的解決方案。查看我的更新後的代碼。 –