it-swarm.com.de

Document.Ready () funktioniert nach PostBack nicht

Ich habe eine Seite, die ein Benutzersteuerelement in einem Aktualisierungsfenster enthält. $(document).ready(function() ) { wird aufgerufen und führt den Code beim ersten Laden der Seite korrekt aus. Wenn der Benutzer jedoch auf eine Schaltfläche (innerhalb des Benutzersteuerelements) klickt, wird document.ready() nicht aufgerufen (document.load, onload funktioniert auch nicht)

Ich habe dies im Netz recherchiert und ähnliche Probleme gefunden, aber nichts, was erklären kann, warum das nicht funktioniert. Welche anderen Ursachen kann es dafür geben, dass document.ready nicht funktioniert?

29
Theomax

Dies ist ein Problem mit partiellem Postback . Das DOM wird nicht erneut geladen, sodass die Dokumentbereitschaftsfunktion nicht erneut aufgerufen wird. Sie müssen einen partiellen Postback-Handler in JavaScript zuweisen, wie so ...

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

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

Der obige Aufruf von add_endRequest sollte in das JavaScript eingefügt werden, das beim ersten Laden der Seite ausgeführt wird.

43
El Ronnoco

Anstelle von $(document).ready können Sie function pageLoad(){} verwenden.

Es wird automatisch von der ScriptManager auf einer Seite aufgerufen, sogar auf einem Postback.

26
tedski

Ich bin vor einiger Zeit darauf gestoßen, wie El Ronnoco sagte, es muss damit einhergehen, dass das DOM nicht neu geladen wird. Sie können jedoch einfach __.$(document).ready(function() {.__

Sys.Application.add_load(function() {

Dies wird es zwingen, auf jedem Postback zu laufen.

Sie können auch die Funktion pageLoad () verwenden, Sie können jedoch nur eine pageLoad-Funktion haben. Mit Sys.Application.add_load können Sie so viele Handler hinzufügen, wie Sie möchten.

15
pharophy

Der beste Weg ist 

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

Javascript-Funktion

<script type="text/javascript">

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

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

oder

Unter UpdatePanel müssen Sie das Clientskript erneut mit registrieren 

ScriptManager.RegisterClientScript

oder 

$(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

Dies ist ein Beispiel, das in der Vergangenheit für mich funktioniert hat:

<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

Dieser Code funktioniert gut, um dieses Problem zu lösen. Wie bereits in dem zuvor veröffentlichten Link ( http://encosia.com/document-ready-and-pageload-are-not-the-same/ ) angegeben, müssen Sie bei asp.NET mit updatePanels die Funktion verwenden pageLoad (). Wenn Sie nur eine Seite haben und in jedem Postback vollständig neu geladen werden, ist $ (document) .ready () die richtige Option.

Beispiel mit pageLoad:

    function pageLoad() {

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

Ich hatte auch das gleiche Problem, aber ich fand den jQuery $ (document) .ready-Ereignishandler, der beim Laden der Seite funktioniert, aber nach ASP.Net AJAX UpdatePanel Partial PostBack wird er nicht aufgerufen. Verwenden Sie also Sys.Application.add_load (function () {}); anstelle von $ (document) .ready . Das funktioniert perfekt für mich :)

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

0
romi