2012-05-01 7 views
18

Wenn ich meine jQuery-Skripte unter den gesamten HTML-Code meiner Seite lade, muss ich noch auf $(document).ready warten, um mit jQuery Elemente auf der Seite finden zu können?

+0

"Technisch", ja - "praktisch", nein. Dies ist seit Jahren konsistentes (nicht definiertes) Verhalten für Browser. Allerdings glaube ich, dass es etwas Magie mit "fertig" und Frames im IE geben könnte ... das Skript sollte immer noch * innerhalb * des Body-Tags sein. –

+0

Bedeutet "Fußzeile" auch "

" oder am Ende von "" oder ...? –

+0

Am Ende des '' –

Antwort

1

Sie tun nicht müssen jQuery ready Funktion verwenden, aber Ihr Code müsste in diesem Sinne geschrieben werden. Beliebige click oder andere bindbasierte Handler können nicht korrekt an Selektoren angeschlossen werden, andere wie live und $.ajax können jedoch wie vorgesehen funktionieren.

Seien Sie vorsichtig, wenn Sie mit diesem Ansatz Skriptlader oder AMD verwenden. jQuery muss verfügbar sein und Sie müssen beim Laden blockieren. Laden Sie jQuery und andere Deps in den Kopf.

Ein großer Blick auf dieser Technik, die beschreibt, dass dies nicht notwendig ist für jQuery-Funktion (nicht unbedingt über den Einsatz in der Fußzeile) zu verwenden:

http://encosia.com/dont-let-jquerys-document-ready-slow-you-down/

+1

Warum würde 'Klick' (oder Selektoren) nicht funktionieren? –

+0

(Dieser Link bezieht sich auf die Verwendung von Skripten in einer HEAD-Position, aber nicht in einer FOOT-Position.) –

+0

Es würde für alles, was im DOM vor der Ausführung verfügbar ist, funktionieren. Alles, was danach geladen wird, mit irgendwelchen Mitteln, wie Ajax oder hinzugefügt in einem nachfolgenden Dokumentwechsel, würde nicht durch jQuerys "Klick" aufgenommen werden. – philwinkle

5

Nein, Sie brauchen nicht $(document).ready für jeden Code, der mit DOM-Elementen auf der Seite interagiert, wenn die Skripts unter diesen Elementen platziert werden.

Es ist gute Praxis, sie vor dem schließenden -Tag zu setzen.

+0

Das HTML-Tag hat nur zwei gültige Kinder, Kopf und Körper, also würde ich wahrscheinlich sagen, dass es mehr als eine gute Übung ist, Ihre Script-Tags innerhalb des schließenden Body-Tags zu platzieren. Parsers können mit ungültigem HTML komisch sein – Hazza

5

Nein, weil das Dokument bereits geladen worden wäre. Der Dom lädt von oben nach unten. Ich persönlich möchte alle meine js am Ende der Seite anstatt in den Kopf legen.

aber es ist nur 1 Zeile Code und ich würde vorschlagen, es nur um sicher zu sein. Sie können es auch noch kürzer machen. $(function() {} ist das gleiche wie $(document).ready(function(){})

+1

Ich verstehe nicht, warum Sie es nur benutzen sollten, um sicher zu sein; es klingt, als würde es die Ausführung unnötig verlangsamen. –

+0

weil es immer jemanden mit einer Browserkonfiguration geben wird, die fehlschlägt, wenn sie nicht sieht, was sie will oder erwartet. running '$ (function() {}' einmal verlangsamt die Dinge nicht genug, um Sie zu kümmern. Sehen Sie sich http://StackOverflow.com/Questions/8160014/Document-Ready-Check-Slows-Down-ie und lesen Die Kommentare für die angenommene Antwort, die Benutzung von '$ (function() {}' dauert durchschnittlich etwa 2-3ms. Nebenbei bemerkt, wenn Sie PHP verwenden, können Sie eine Funktion oder Klasse erstellen, um alle js in eine Datei zu schreiben in 1 '$ (function() {}' oder Sie können es in js tun, um in Entwurfsmuster zu programmieren. – Yamiko

Verwandte Themen