web-dev-qa-db-ja.com

Document.Ready()は、PostBack後に機能しません

更新パネル内にユーザーコントロールを含むページがあります。 $(document).ready(function() ) {が呼び出され、ページが最初にロードされたときにコードを正しく実行しますが、ユーザーが(ユーザーコントロール内で)ボタンをクリックしても、document.ready()は呼び出されません(document.loadonloadも機能しません)

私はこれをネット上で調査しましたが、同様の問題を発見しましたが、なぜこれが機能しないのかを説明することはできません。 document.readyが機能しない他の原因は何ですか?

33
Theomax

これは partial postback で問題になります。 DOMはリロードされないため、ドキュメント準備機能は再びヒットしません。 JavaScriptで次のように部分的なポストバックハンドラーを割り当てる必要があります。

function doSomething() {
   //whatever you want to do on partial postback
}

Sys.WebForms.PageRequestManager.getInstance().add_endRequest(doSomething);

上記のadd_endRequestの呼び出しは、ページが最初にロードされたときに実行されるJavaScriptに配置する必要があります。

46
El Ronnoco

$(document).readyの代わりにfunction pageLoad(){}を使用できます。

ポストバック時でも、ページ上のScriptManagerによって自動的に呼び出されます。

28
tedski

El Ronnocoが言ったように、DOMがリロードされないようにする必要があります。ただし、単に$(document).ready(function() {を次のように変更できます。

Sys.Application.add_load(function() {

これにより、すべてのポストバックで強制的に実行されます。

関数pageLoad()も使用できますが、pageLoad関数は1つしか持てませんが、Sys.Application.add_loadでは、必要な数のハンドラーを追加できます。

15
pharophy

最も良い方法は

<asp:UpdatePanel...
<ContentTemplate
     <script type="text/javascript">
                    Sys.Application.add_load(LoadScript);
     </script>
 you hemla code gose here 
</ContentTemplate>
    </asp:UpdatePanel>

Javascript関数

<script type="text/javascript">

        function LoadScript() {
            $(document).ready(function() {

                   //you code gose here 
                                    });
         }
</script>

または

UpdatePanelの下で、次を使用してクライアントスクリプトを再度登録する必要がある

ScriptManager.RegisterClientScript

または

$(document).ready(function() {
    // bind your jQuery events here initially
});

var prm = Sys.WebForms.PageRequestManager.getInstance();

prm.add_endRequest(function() {
    // re-bind your jQuery events here
    loadscript();

});


$(document).ready(loadscript);

function loadscript()
{
  //yourcode 
}
10
Pranay Rana

これは過去に私のために働いた例です:

<script>
function MyFunction(){ 
    $("#id").text("TESTING");
}
//Calling MyFunction when document is ready (Page loaded first time)
$(document).ready(MyFunction); 

//Calling MyFunction when the page is doing postback (asp.net)
Sys.WebForms.PageRequestManager.getInstance().add_endRequest(MyFunction);
</script>
3
Ernest

以下のコードは、この問題を解決するためにうまく機能します。前に投稿されたリンクに示されているように( http://encosia.com/document-ready-and-pageload-are-not-the-same/ )、updatePanelsでasp.NETがある場合関数pageLoad()を使用します。ページが1つしかない場合、各ポストバックで完全にリロードされるため、$(document).ready()が適切なオプションです。

PageLoadを使用した例:

    function pageLoad() {

        $(".alteraSoVirgula").keyup(function () {
            code here
        })
    }

私も同じ問題に直面していましたが、ページの読み込み時にjQuery $(document).readyイベントハンドラーが動作することを発見しましたが、ASP.Net AJAX UpdatePanel Partial PostBackの後は呼び出されません。 $(document).readyの代わりにSys.Application.add_load(function(){});を使用してください。これは私にとって完璧に機能します:)

<script>
Sys.Application.add_load(function() { //Your code }); </script>

0
romi