6

したがって、updatepanel が更新された後にいくつかの JavaScript 関数を実行したいので、次のようにします。

function pageLoad() { 

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


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

上記のコードでは、パネルを 1 回更新すると、「foobar」が 1 回警告されます。パネルを 2 回目に更新すると、「foobar」が 2 回ポップアップします。パネルを更新する 3 回目のトリガーで、「foobar」が 3 回ポップアップしました... 4 回目のポップ 4 回など....

これは何が原因ですか??

ありがとう~~~

4

3 に答える 3

4

これは、updatepanel ポストバック中にも pageLoad が実行されるためです。簡単な解決策があります:

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);
}
于 2012-08-03T20:25:34.037 に答える
1

ありがとうございました。Sam が言及したように、prm インスタンスが多すぎるようです。Sys.WebForms.PageRequestManager.getInstance().remove_pageLoaded(panelLoaded); を追加しました。alert() の後、すべてが良好です。

于 2012-08-03T20:41:36.313 に答える
0

これが起こっていることです。pageLoad基本的にApplication.InitPageRequestManager.EndRequestの組み合わせとして機能します。つまり、アプリケーションの初期化 (ほぼ DOM Ready ) とそれぞれで機能します。Partial PostBack

したがって、pageLoad はすべての PostBack で機能します。完全および部分的。

ここで、部分的なポストバックごとに ScriptManager のインスタンスで pageLoaded イベントを再度バインドして、この動作を何度も引き起こしています。

于 2012-08-03T20:46:22.147 に答える