11 Stimmen

Ausführen einer Funktion kurz vor dem Auslösen von $(document).ready()

Ich habe mehrere Funktionen in mehreren Dateien an $(document).ready angehängt und möchte eine einzelne Funktion anhängen, um vor ihnen als entweder die erste, die $(document).ready behandelt oder unabhängig vor dem $(document).ready-Handler auslösen zu geschehen.

Gibt es eine Möglichkeit, die Reihenfolge der Funktionen zu behandeln, die jQuery intern als Teil von jQuery.fn.ready auslöst oder eine Funktion einzuhängen, die kurz vor jQuery.fn.ready aufruft.

Ist die Bearbeitung von jQuery.fn.ready in einem Skript eines Drittanbieters sicher zu tun oder wird es schreckliche Auswirkungen auf andere Plugins von Drittanbietern verursachen (abgesehen von Plugins, die jQuery.fn.ready selbst bearbeiten)

[Bearbeiten]:

als Beispiel

$(document).ready(function b() {});
....
$(document).ready(function a() {/* optional setup*/});
....
$(document).ready(function c() {});

Die Funktion a muss unabhängig von der Reihenfolge zuerst ausgeführt werden, wird aber nur auf einigen wenigen Seiten aufgerufen. Ich kann die Reihenfolge von b oder c nicht garantieren, also kann ich keine benutzerdefinierten Ereignisse am Anfang von b oder c auslösen, um a auszulösen.

So möchte ich eine generische Lösung, die ich verwenden können, um zwangsweise ein am Anfang von jQuery's interne readyList oder Haken in jQuery's ready-Funktion und bearbeiten Sie es sicher, so dass es eine vor einer der anderen Funktionen in readyList aufruft.

[Weitere Bearbeitung]

Wenn möglich, möchte ich die Ausführungsreihenfolge des Javascript-Codes nicht umgestalten oder irgendeinen anderen Code außer der Funktion a() berühren müssen. Ich bin mir bewusst, dass eine Umstrukturierung mir erlauben würde, dieses Problem zu umgehen, aber ich würde lieber nur eine einzige Funktion schreiben wie

$.beforeReady(function a() {});

16voto

Jacob Relkin Punkte 156445

Dies wäre ein Zeitpunkt, an dem ich ein benutzerdefiniertes Ereignis auslösen würde, das alle Ihre anderen Dateien bind hätten Sie nur einen einzigen ready Handler, der etwas tut und dann das benutzerdefinierte Ereignis auslöst.

Verwenden Sie also an anderer Stelle in Ihrem Code anstelle von $(document).ready würden Sie verwenden

$(window).bind('setup', function() {
   //code here...
});

Und/oder

$(window).bind('loaded', function() {
   //some other code here...
});

Und in deinem einzigen und einzigen ready Handler, würden Sie etwa so vorgehen:

$(document).ready(function() {
   $(window).trigger('setup');
   $(window).trigger('loaded'):
});

0voto

BGerrissen Punkte 20514

$(document).ready() oder einfach $(function(){}) ist nur eine .addEventListener Implementierung (nicht ganz, aber fast), d. h. Sie können Zuhörer vor und nach der Implementierung hinzufügen.

$(document).ready(listener); // goes off first.
$(document).ready(otherListener); // goes off 2nd.

Und so weiter, es ist nicht schwer, Funktionen zu verbinden. Es ist nicht nötig, zu hacken .ready() imo.

0voto

EamonnM Punkte 2031

Ich hatte gerade genau das gleiche Problem. Ich habe ein kleines Skript auf GitHub, das eine $.beforeReady() Funktion hinzufügt. Lustig :)

https://github.com/aim12340/jQuery-Before-Ready

Laden Sie das Skript einfach direkt nach jQuery wie in diesem Beispiel:

<html>
    <head>
        <script src="https://code.jquery.com/jquery-3.2.1.min.js"></script>
        <script src="jquery-before-ready.js"></script>
    </head>
    <body>
        <script>
            $(document).ready({
                alert("This function is declared first!")
            })
        </script>
        <script>
            $.beforeReady(function(){
                alert("This function is declared second but executes first!")
            })
        </script>        
    </body>
</html>

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X