JS-Klasse in Datei auslagern
lima-city → Forum → Die eigene Homepage → HTML, CSS & Javascript
abfrage
all
code
datei
dokument
einbinden
ersten datei
fehler
funktion
http
kleinschreibung
klicken
machen
not
part
pfad
problem
sekunde
url
zeile
-
Hi, ich habe diesen Code in einer externen JS-Datei stehen (habe gerade erst angefangen):
So weit, so gut. Das funktioniert und in der Fehlerkonsole (des FF) wird nichts ausgegeben.function Mouseposition() { // properties this.posX = 0; this.posY = 0; // methods this.startDragging = function startDragging(e) { this.posX = document.all ? window.event.clientX : e.pageX; this.posY = document.all ? window.event.clientY : e.pageY; }; this.stopDragging = function startDragging() { alert("war hier"); }; } // build objects var mouseposition = new Mouseposition(); // working part document.onmousemove = mouseposition.startDragging; document.onmouseup = mouseposition.stopDragging; mouseposition.stopDragging();
Wenn ich nun aber die Klasse Mouseposition auslagere, d.h. den Inhalt der o.g. Datei auf
reduziere und eine weitere Datei mit dem Code// build objects var mouseposition = new Mouseposition(); // working part document.onmousemove = mouseposition.startDragging; document.onmouseup = mouseposition.stopDragging; mouseposition.stopDragging();
anlege, dann funktioniert es schon nicht mehr. Ich bekomme in der Fehlerkonsole "Mouseposition is not defined" für Zeile 2 der ersten Datei ausgegeben und das, obwohl ich im HTML-Dokument die zweite Datei vor der ersten Datei einbinde. Auch, wenn ich das, das die erste Datei macht, erst onload ausführe, wird der Fehler geworfen.function Mouseposition() { // properties this.posX = 0; this.posY = 0; // methods this.startDragging = function startDragging(e) { this.posX = document.all ? window.event.clientX : e.pageX; this.posY = document.all ? window.event.clientY : e.pageY; }; this.stopDragging = function startDragging() { alert("war hier"); }; }
Ich könnte zwar alles in eine Datei schreiben, allerdings fände ich das sehr unübersichtlich. Gibt es eine bessere Möglichkeit? -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
das-koenigreich schrieb:Auch, wenn ich das, das die erste Datei macht, erst onload ausführe, wird der Fehler geworfen.
Wie denn genau? Die sicherste Variante wäre:
window.onload = function(){ if(function_exists('Mouseposition')){ // build objects var mouseposition = new Mouseposition(); // working part document.onmousemove = mouseposition.startDragging; document.onmouseup = mouseposition.stopDragging; mouseposition.stopDragging(); } else { alert('Funktion existiert nicht!'); } };
Die if-else-Abfrage erstmal nur zum Testen...
Beitrag zuletzt geändert: 3.4.2012 20:23:02 von anti-atomkraft -
Hallo,
function_exists() gibt es gar nicht. Ich habe die Zeile
darum durch die Zeileif(function_exists('Mouseposition')){
ersetzt. Danach wurde ausgegeben, dass die Funktion nicht existiere. Nachdem ich den ausgelagerten Teil vor den Code in die selbe Datei kopiert habe, wurde diese Meldung nicht mehr ausgeben und das Script funktionierte, d.h. grundsätzlich funktioniert die Abfrage, ob die Klasse existiert.if(typeof Mouseposition == 'function'){
Edit: Der Chromium spuckt für Zeile 2, also für
, die Fehlermeldungvar mouseposition = new Mouseposition();
Uncaught ReferenceError: Mouseposition is not defined
aus.
Edit2: Ich habe gerade den bisherigen Inhalt der Datei, in der das Objekt gebaut wird, in eine Funktion verpackt und diese mit einer Sekunde Verzögerung aufgerufen. Nach einer Sekunde Verzögerung erschien auch der Fehler in der Fehlerkonsole des FF.
Beitrag zuletzt geändert: 3.4.2012 21:57:59 von das-koenigreich -
das-koenigreich schrieb:
function_exists() gibt es gar nicht
Das hab' ich wohl mit PHP verwechselt. xD
Hab' gerade mal eine Test-Datei erstellt und hier funktioniert bei mir alles...
-> Sowohl in einer, wie in zwei externen Dateien
-> Sowohl mit FireFox-Aurora, wie mit Chrome
Von daher muss dein Problem irgendwo anders liegen. Kannst du 'nen Link posten? -
Eigentlich ist die einzige Möglichkeit, dass die Datei die du einbinden willst nicht existiert, vllt hast du dich ja vertippt, um das schnell und einfach zu überprüfen kannst du im Firefox Strg+U drücken um dir dern Quelltext anzeigen zu lassen und dann auf den link zu dem Script klicken.
Mit freundlichen Grüßen -
Wichtig ist, dass du erst die "Klasse" einbindest und die Datei, in der die Klasse aufgerufen wird erst danach, da die Scripte in der Reihenfolge interpretiert werden, in der sie geschrieben/eingebunden wurden.
-
Ok, das ist jetzt sehr merkwürdig. Ich habe es einfach hochgeladen. Vom Lima-Server aus funktioniert alles. Lokal aber nicht. Beides habe ich sowohl an meinem Desktop-Rechner, als auch an meinem Laptop getestet und beide kamen zum gleichen Ergebnis.
Edit: Das Problem ist gelöst. Ich habe den Dateinamen der ausgelagerten Klasse natürlich groß geschrieben, da Klassennamen immer groß geschrieben werden. Beim Einbinden in das HTML-Dokument habe ihn aber klein geschrieben.
Nun ist da aber ziemlich viel passiert, das mir merkwürdig vorkommt: Nachdem ich die Dateien hochgeladen hatte, hat es funktioniert. Die Groß- und Kleinschreibung wurde einfach ignoriert. Als ich das HTML-Dokument von meiner Festplatte aus mit einem Doppelklick öffnete, war die Groß- und Kleinschreibung aber von Belang. Trotzdem konnte ich beim Klicken auf die Pfade in der Quellcodeansicht zu den JS-Dateien wechseln, obwohl eine von ihnen mit einem Großbuchstaben begann, der Pfad aber mit einem Kleinbuchstaben. Da war sie dem FF dann wieder egal. Erst jetzt, als ich das HTML-Dokument mit http://localhost/[...]/meinHtmlDokument.html geöffnet hatte (das Script funktionierte da auch nicht, d.h. da war die Groß- und Kleinschreibung wichtig) und die Quellcodeansicht öffnete, funktionierte die Verlinkung des einen Pfads nicht. Durch solche Sachen macht einem der Browser das Korrigieren von Fehlern echt schwer.
Beitrag zuletzt geändert: 4.4.2012 15:42:02 von das-koenigreich -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage