ChrisB: Beschreiben ist eine Kunst

Beitrag lesen

Hi,

Wenn ihr doch die Probleme lösen könnt, sofern man alles in kleinste Detail beschreibt, dann will ich das mal hier sehen:

"Ja, pack sie bei ihrem Ehrgeiz - dann werden sie nicht mehr anders können, als dir endlich das zu liefern, was du haben willst!"

Nice try, but - dream on.

Du wurdest darauf hingewiesen, dass du zum Auffinden von Fehlern in deinem Code die JavaScript-Fehlerkonsole deines Browsers nutzen sollst - vorzugsweise die des FF, deren Meldungen sind jedenfalls weitaus besser als die der des IE. (Das gilt immer, so lange es nicht um Browser-spezifische Probleme geht.)

stop = function() {
var Element = event.target.id || event.srcElement.id

Sie wird dir bezüglich dieser Zeile melden, dass event nicht definiert ist.

move = function(event) {
   //...
   document.getElementById("ix"+Element).value = event.clientX - mausX

Und bei dieser irgendwann folgendes,
document.getElementById("ix" + Element) is null

Die Weiche habe ich ebenfalls eingebaut "if (!event) event = window.event;" jedoch scheint mein IE nichts damit anfangen zu können, die Input-Bereiche, die ja die Position des Divs in Pixel anzeigen soll verändert sich nicht.

Du ziehst falsche Schlüsse.

Die Weiche ist im IE in diesem Falle überflüssig, da du event (und damit, auf Grund der Auflösung der Scope Chain, window.event) bereits beim Aufruf der Funktion aus dem HTML heraus als Parameter übergeben hast. Der Parameter event ist also in der Funktion bereits belegt, if (!event) trifft daher nicht zu.

Warum in deinen Input-Feldern dann aber kein Wert erscheint, liegt (zunächst einmal) daran, dass du im IE mit dem nachfolgenden Code einen Fehler verursachst. (*Hier* ist jetzt ein Blick in die Fehlerkonsole des *IE* fällig.)

var Element = event.target.id || event.srcElement.id
Hier machst du den zweiten Schritt vor dem ersten.
Der IE kennt event.target nicht - also liefert dieser Ausdruck lediglich null. Nachfolgend versuchst du auf eine Eigenschaft namens id dieses Objektes zuzugreifen - was einen Laufzeitfehler verursacht, denn null hat keine Eigenschaften.

Ansonsten würde ja in "event.ClientX/Y" etwas richtiges ankommen, und somit das Value des Inputs verändert werden.

Das wäre möglich - aber du lässt dem IE keine Chance dazu, weil er gar nicht mal zu diesen Stellen kommt; die Abarbeitung des Codes wurde auf Grund des vorher aufgetretenen Fehlers abgebrochen.

Problem an der Stelle ist also: das IE will den Event-Handler nicht richtig erkennen, bzw diesen nicht durch "window.event" ersetzen, damit es im IE dann doch funktioniert.

Nein, das ist nicht das Problem.
Wie ich schon schrieb, ziehst du hier *falsche* Schlüsse.

Und das ist genau der Grund, warum wir "funktioniert nicht" als Problembeschreibung nicht akzeptieren - weil "funktioniert nicht" zwar letztendlich das "Ergebnis" des ganzen sein mag, man aber die einzelnen Schritte nacheinander betrachten *muss*, wenn man herausfinden will, *warum* es nicht funktioniert.

Und wir wollen, dass *du* lernst, sowas herauszufinden. Und deshalb geben wir dir Stück für Stück Hinweise - damit du einen Schritt nach dem anderen machen kannst.

Im weiteren Verlauf wird die ID des Elementes in Element geschrieben (für die korrekte Zuweisung des richtigen Divs).
Dann [...]

Nein, nichts "dann", weil der "weitere Verlauf" an der Stelle, wo du einen Fehler beim Versuch der Ermittlung der ID machst, abgebrochen wurde.

Auf den weiteren Code gehe ich jetzt nicht ein - schliesslich haben wir ein konkretes Problem identifiziert, und das muss jetzt als allererstes behoben werden. Danach können wir ggf. weiter sehen.

Problem, welches jetzt aber aufkommt ist, dass sich das Feld nicht bewegt.

Siehst du? Schon wieder betrachtest du nur das "Endergebnis" - das sich aber nicht einstellen will, weil vorher bereits Fehler aufgetreten sind.
*Genau* *das* ist die "funzt nich"-Sichtweise. Und wir wollen dir dabei helfen, sie dir abzugewöhnen - weil sich solche Probleme nur beheben lassen, wenn man sie Schritt für Schritt angeht, und dabei an den *richtigen* Stellen die *richtigen* Schlüsse zieht.

Eigentlich läuft ja die Funktion "move" solange ab, wie ich die Maus gedrückt halte. Aber obwohl ich die Maus bewege, verändert sich die Position nicht. Ich bin mir aber nicht sicher woran genau das liegen könnte. (Deswegen frage ich ja auch hier -.-)

Einen entscheidenden Hinweis dazu hast du inziwschen schon von Andreas bekommen - du setzt *ungültige* Werte für die CSS-Eigenschaften.
Und selbst wenn du gültige Werte setzen würdest, müssten diese wirkungslos bleiben, weil die Elemente, für die du sie setzt, von ihrer Formatierung her nicht die Voraussetzung mitbringen, dass diese wirksam sein dürften.
Jetzt wirst du vermutlich wieder meckern wollen, dass dies nur ein Post-It auf einem Ziegelstein ist, statt einer konkreten Aussage - ja, genau :-) Weil ich möchte, dass du dich selbst informierst, wann diese Eigenschaften eine Wirkung zeigen dürfen. Wenn deine CSS-Kenntnisse noch zu gering sind, um das ohne Nachlesen zu wissen - dann sind wir nämlich schon wieder beim "den zweiten Schritt vor dem ersten machen".

Das Value des Inputs kommt richtig aus, also funktioniert ja "document.getElementById("ix"+Element).value = event.clientX - mausX" dieser Teil.

Der funktioniert bei mir im Firefox nur genau ein mal (und auch nur dann, wenn ich direkt in die Inputfelder klicke).
Das liegt am weiter oben erwähnten Fehler,

document.getElementById("ix" + Element) is null

War das jetzt genug Problembeschreibung?

Schon besser.
Aber noch zu wenig, was die Ergebnisse *deiner* Fehlersuche angeht; und noch zu wenig logisches Denken und methodisches Vorgehen, was das ziehen der *richtigen* Schlüsse angeht.

Weil wenn nicht, verstehe ich euch echt nicht. Wie tief soll man denn ein Problem beschreiben? Soll man sein Script bis ins kleinste Detail beschreiben, oder wie?!

Man sollte es vor allem in seinen Details untersuchen - und der Blick in die Fehlerkonsole ist der allererste Schritt dahin. Denn dort stehende Meldungen einfach zu ignorieren, und sich dann zu wundern, warum das ganze nicht wie gewünscht "funktioniert" - das ist *keine* Fehler*suche*.

Ich dachte sowas wäre, zumindest bei dem einfachen Zeugs was ich da geschrieben habe, sofort erkenntlich!

So "einfach" ist es nicht.
Und wie sich der Scriptverlauf im Detail verhält, vermag der Mitleser auch nicht unbedingt vorherzusagen - *deshalb* schaut man in die Fehlerkonsole, um nachzuvollziehen, *was* *wann* *wo* schief geht.

Ich habe jetzt meiner Meinung nach sehr genau und eindeutig, die Funktion und das Problem erklärt.

Und ich habe dir m.E. jetzt sehr detailiert erklärt, wie man schrittweise bei der Fehlersuche vorgeht; und wie man sich einem Problem logisch und methodisch nähert, anstatt nur das "Ergebnis" "funzt nich" zu betrachten, weil das in keinster Weise weiterhilft.

Könnt ihr mir JETZT helfen?

Bist du JETZT bereit, Hilfe anzunehmen - oder wirst du wieder nur meckern, weil ich nicht sofort die fertige Lösung auf dem Silbertablet präsentiert habe, sondern dir zu zeigen versuche, welche Schritte bei der Fehlersuche zum Erfolg führen?
Falls letzteres, dann steig' ich hiermit aus.

MfG ChrisB

--
Light travels faster than sound - that's why most people appear bright until you hear them speak.