2016-06-04 25 views
-6

ich Ruby bin auf Rails und eine einfache jQuery won't ein Element ausführen über wie folgt aus:jQuery funktioniert nicht sofort

$("header").hide(); 

jedoch, wenn ich es in eine Funktion wickeln und es mit dem Dokument aufrufen .ready es tut das Richtige:

function myCode() { 
    $("header").hide(); 
} 

$(document).ready(myCode); 

Warum es nicht gerade funktioniert ?? Ich habe gem jquery-rails installiert und habe sogar // = jquery.min.js in der Datei application.js benötigt.

Danke für die Hilfe!

+1

Warum sollte es funktionieren, bis das Dokument geladen ist? – nicael

+1

* "Warum?" * Element muss existieren, wenn Sie diesen Code ausführen. Ziemlich grundlegende Grundzüge der Javscript- und Dom-Manipulation. Genauso wie Sie keine Pizza essen können, die noch nicht geliefert wurde – charlietfl

+2

[Warum findet jQuery oder eine DOM-Methode wie getElementById das Element nicht?] (Https://stackoverflow.com/questions/14028959/why-does -jquery-or-a-dom-methode-wie-geelementbyid-not-find-the-element) –

Antwort

-2

Wenn das Dokument nicht bereit ist, wird das DOM noch nicht erstellt. Das Element header existiert nicht, wenn dieser Code ausgeführt wird, also passiert nichts. Um eine DOM-Manipulation durchzuführen, müssen Sie warten, bis die Seite vollständig geladen ist, dh unter $(document).ready.

+0

Nicht ganz genau. Whole Dom muss nicht unbedingt geladen werden. Kann diesen Code direkt nach dem Element ohne '$ (document) .ready' platzieren und funktioniert gut – charlietfl

+0

Das stimmt, danke für die Korrektur! –

+0

ich bin verwirrt .. also Sie sagen, das sollte geradeaus als erste Zeile des Codes für application.js arbeiten? $ ("Kopfzeile"). hide(); –