web-dev-qa-db-fra.com

Document.Ready () ne fonctionne pas après PostBack

J'ai une page qui contient un contrôle utilisateur dans un panneau de mise à jour. $(document).ready(function() ) { est appelé et exécute le code correctement lorsque la page se charge pour la première fois, mais si l'utilisateur clique sur un bouton (dans le contrôle utilisateur), la fonction document.ready() ne sera pas appelée (document.load, onload ne fonctionnera pas non plus)

J'ai fait des recherches sur le net et trouvé des problèmes similaires, mais rien ne peut expliquer pourquoi cela ne fonctionne pas. Quelles autres causes peut-il y avoir pour que document.ready ne fonctionne pas?

29
Theomax

Ce sera un problème avec postback partiel . Le DOM n'est pas rechargé et la fonction de préparation de document ne sera plus activée. Vous devez attribuer un gestionnaire de publication partielle en JavaScript comme si ...

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

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

L'appel ci-dessus à add_endRequest doit être placé dans le code JavaScript qui est exécuté lors du premier chargement de la page.

43
El Ronnoco

Au lieu de $(document).ready, vous pouvez utiliser function pageLoad(){}.

Elle est automatiquement appelée par la variable ScriptManager sur une page, même sur une publication.

26
tedski

Comme le disait El Ronnoco, cela fait un moment que je suis tombé dessus, il faut que le DOM ne soit pas rechargé. Cependant, vous pouvez simplement changer$(document).ready(function() {to

Sys.Application.add_load(function() {

Cela le forcera à s'exécuter sur chaque publication.

Vous pouvez également utiliser la fonction pageLoad (), mais vous ne pouvez avoir qu'une seule fonction pageLoad, alors qu'avec Sys.Application.add_load, vous pouvez ajouter autant de gestionnaires que vous le souhaitez.

15
pharophy

Le meilleur moyen est 

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

Fonction javascript

<script type="text/javascript">

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

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

ou

Sous UpdatePanel, vous devez enregistrer à nouveau le script client à l'aide de 

ScriptManager.RegisterClientScript

ou 

$(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 
}
9
Pranay Rana

Ceci est un exemple qui a fonctionné pour moi dans le passé:

<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

Ce code ci-dessous fonctionne bien pour résoudre ce problème. Comme indiqué dans le lien précédent ( http://encosia.com/document-ready-and-pageload-are-not-the-same/ ), lorsque vous avez un asp.NET avec updatePanels, vous devez utiliser la fonction pageLoad (). Lorsque vous n'avez qu'une page et que chaque publication est entièrement rechargée, le $ (document) .ready () est la bonne option.

Exemple utilisant pageLoad:

    function pageLoad() {

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

Je faisais également face au même problème, mais j’ai trouvé le gestionnaire d’événements jQuery $ (document) .ready fonctionnant lorsque la page est chargée, mais après ASP.Net AJAX UpdatePanel Partial PostBack, il n’est pas appelé. utilisez donc Sys.Application.add_load (function () {}); au lieu de $ (document) .ready . Cela fonctionne parfaitement pour moi :)

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

0
romi