• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

[ERLEDIGT] document.getElementById hackt!

colaholiker

Mitglied
Hallo Leute,

Mehrere Webseiten mit einer gemeinsamen 'funktionen.js' Datei.
Wie ich gelesen habe, lädt nur die zuerst aufgerufene Seite die Funktionen.

Ganz oben in der js- Datei möchte ich einen mouseOver- Eventlistener testen, der nicht die zuerst geladene Hauptseite betrifft:
Javascript:
var e = document.getElementById("infos_speichern");
e.addEventListener('an', mouseOver);
e.addEventListener('aus', mouseOut);
Die Konsole sagt: Uncaught TypeError: e is null

Warum? Die ID existiert. Bei anderen IDs kommt die Meldung auch.

Hm, wenn ich nur mal teste, lade ich ja die bewußte Seite alleine, und ich habe mal nur die 3 Zeilen oben in der js- Datei gelassen.
Da ändert sich nichts.
Ich stehe sehr auf dem Schlauch...
 
Werbung:
Mehrere Webseiten mit einer gemeinsamen 'funktionen.js' Datei.
Wie ich gelesen habe, lädt nur die zuerst aufgerufene Seite die Funktionen.
Das wäre mir neu, wenn eine Seite ein JS-Datei einbindet, sind auch die Funktionen, die darin definiert sind, dort verfügbar. Oder meinst Du das Caching?

Wo bindest Du denn die JS-Datei ein? Wenn dein Javascript ausgeführt wird, müssen die Elemente, auf die zugegriffen wird, schon definiert sein, hier #infos_speichern. Wenn Du die Datei möglicher Weise im Head einbindest, ist das nicht der Fall. Auf jeden Fall am Ende des Body einbinden.
 
Hi Sempervivum,
ich habe das da so interpretiert als globale Variablen nicht funktioniert hatten. Die stehen jetzt auf "ihrem" HTML- File und es läuft.
Oder meinst Du das Caching?
nein.
Wenn Du die Datei möglicher Weise im Head einbindest, ist das nicht der Fall. Auf jeden Fall am Ende des Body einbinden.
Du machtst meine schöne Welt kaputt! ;-)

HTML:
<link rel="stylesheet" type="text/css" href="a-Arbeitsfiles/style.css">
<script type="text/javascript" src="a-Arbeitsfiles/funktionen.js"></script>
Das (beides?) von <head> ganz nach unten (über </body>)?

Schön, ich kanns ja versuchen. Aber es gibt zu bedenken, daß die js-Datei schon so 1000 Zeilen hat (mit Luft).
Da wären doch schon ganz andere Sachen gestorben!

Und ich habe all das testweise gelöscht bis auf obige 3 Zeilen, und nur das Blatt mit der ID dazu aus einem Ordner heraus geladen. Mit dem Ergebnis.

Hat mir evtl. die Mozilla-Chrew das js abgestellt, weil mein Browser schon tagelang um Hilfe ruft???
 
Werbung:
Zu "das da", sie schreiben:
So muß es nicht in jedem HTML-Dokument neu geladen werden und veringert so die Ladezeit Ihrer Homepage.
Damit kann nur das Caching gemeint sein, wenn es auch ein wenig missverständlich formuliert ist: Geladen werden muss es auf jeden Fall, nur kann das aus dem Cache passieren, wenn es schon drin ist.
Und ein anderer Grund, der möglicher Weise noch wichtiger ist, wird gar nicht erwähnt: Die Pflege, wenn Du x Seiten hättest mit x-mal dem selben Javascript, müsstest Du auf jeder dieser Seiten ändern.
Und dies:
Code:
<script language=“JavaScript“ type=“text/javascript“ src=“main.js“></script>
ist Asche, language=“JavaScript“ type=“text/javascript“ wird heute nicht mehr gebraucht.
 
Hattest recht, die Scriptverlinkung unten ist besser.

Zur ausgelagerten js-Datei und den "Globalen" nochmal:
wenn ich auf Page A bin, muß es dann nicht zwagsläufig Fehlermeldungen in der Konsole geben, wenn Variablen für IDs der Pade B deklariert sind? Auch wenn die gerade nicht verwendet werden?

Jedenfalls hat meine Variable 'e' jetzt eine Bedeutung.
Dann mach ich mal weiter...
 
Werbung:
wenn ich auf Page A bin, muß es dann nicht zwagsläufig Fehlermeldungen in der Konsole geben, wenn Variablen für IDs der Pade B deklariert sind?
Auf jeden Fall. Aber dann muss man fragen, ob der betr. Code in eine globalen JS-Datei gut aufgehoben ist.
 
Wah! Das Mouseover- Event funktioniert! Morgen teste ich mal, inwieweit es sich tiefer im Code placieren läßt.

Ja die Script- Datei aufzuteilen hat schon was. Ich hab in dieser schon Abschnitte abgeteilt für die einzelnen Seiten. Das geht in die Richtung.

Übrigens:
Code:
        ...
        get_opts_ram_to006(); //-- nur für 006
    </script>
    <script src="funktionen.js"></script>
</body>
so geht's, und
Code:
        get_opts_ram_to006(); //-- nur für 006
        src="funktionen.js";
    </script>
</body>
so nicht.
Viesooo?
 
Wenn, dann müsste man es so versuchen:
Code:
<script src="funktionen.js">
    get_opts_ram_to006();
    // und mehr JS
</script>
Geht aber auch nicht. Den Grund kenne ich nicht, ich akzeptiere, dass es so ist.
 
Werbung:
Hallo,
inzwischen habe ich auch die Script-Datei aufgeteilt.
Ist einiges zu bedenken und zu testen, etwa ob ein Eventhandler nur in der Hauptdatei ausreicht, wie Variablen verwendet werden, die zur anderen js-Datei übertragen werden sollen usw.
Momentan funktioniert der gesamte Aufbau aber, und ich kann noch ein paar liegengebliebene Kanten abschleifen.
Vielen Dank!
 
Zurück
Oben