簡體   English   中英

為什么我的函數在UpdatePanel加載后會多次運行

[英]Why does my function run multiple times after UpdatePanel is loaded

所以我想在我的updatepanel更新后運行一些javaScript函數,所以我有:

function pageLoad() { 

    var prm = Sys.WebForms.PageRequestManager.getInstance();
    prm.add_pageLoaded(panelLoaded);
}


function panelLoaded(sender, args) {
        alert("foobar");
}

使用上面的代碼,如果我一次更新面板,“ foobar”將被警告一次; 如果我第二次更新面板,“ foobar”將彈出兩次; 第三次觸發面板更新時,“ foobar”彈出了3次...第4次彈出了4次,依此類推。

是什么原因造成的??

謝謝~~~

這是因為pageLoad也在updatepanel回發期間執行。 有一個簡單的解決方案:

function pageLoad(sender, eventArgs) {
    // If this is being executed by ajax
    if (eventArgs) {
        // And this is only a partial load
        if (eventArgs.get_isPartialLoad()) {
            // Don't perform any further processing
            return;
        }
    }
    var prm = Sys.WebForms.PageRequestManager.getInstance();
    prm.add_pageLoaded(panelLoaded);
}

謝謝大家,問題似乎像Sam提到的那樣有太多的prm實例。 我添加了Sys.WebForms.PageRequestManager.getInstance()。remove_pageLoaded(panelLoaded); 在alert()之后,一切都很好。

這就是正在發生的事情。 pageLoad基本上是Application.InitPageRequestManager.EndRequest的組合。 這意味着它可以在應用程序初始化(大約支持DOM就緒)和每個Partial PostBack

因此pageLoad可在所有PostBacks上使用; 全部和部分。

現在,您在每次部分回發時都在ScriptManager的實例上再次綁定pageLoaded事件,一次又一次導致此行為。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM