Entwickler-Ecke
Programmiersprachen (Client) - [JavaScript] Ereignis eines Objektes zur Laufzeit setzen
Heiko - Di 05.06.07 18:24
Titel: [JavaScript] Ereignis eines Objektes zur Laufzeit setzen
Hallo,
ich verzweifle gerade mal wieder bei JS. Und zwar habe ich eine Funktion
SetStatusbarText die auf einer bestimmten Komponente einen Hint setzt. Da ich diese Funktion nun an mehreren Stellen brauche und es ja ne Menge Servertraffic frisst wenn es 20x in einer Seite steht und es auch anders gehemn sollte, versuche ich das ganze jetzte per JS.
Momentan sieht die HTML so aus:
Quelltext
1:
| <td><input type="text" title="Test" name="loginname" id="loginname" maxlength="255" onmouseover="SetStatusbarText('Hier bitte Ihren Loginnamen eingeben!')" onmouseout="SetStatusbarText('')" onkeyup="CheckLoginData()" /></td> |
Später soll sie so hier aussehen
Quelltext
1:
| <td><input type="text" title="Test" name="loginname" id="loginname" maxlength="255" title="Hier bitte Ihren Loginnamen eingeben!" onkeyup="CheckLoginData()" /></td> |
Und die beiden Eriegnisse, die ich vorher da hatte, sollen nun per JS eingefügt werden.
Allerdings funktioniert es nicht :(:
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22:
| function SetStatusbarText(text){ document.getElementById('statusbar').innerHTML = text; }
/*...*/
function SetHintMethods(parent){ var node = parent.firstChild; while(node != null) { if (node.nodeType === 1) { node.onmouseover = "SetStatusbarText('bla')"; SetHintMethods(node); } node = node.nextSibling; } }
function OnLoad(){ if (document.getElementById('loginbutton')) CheckLoginData(); SetHintMethods(document.body); } |
Theoretisch müsste jetzte überall "bla" in meiner SDtatusbar ausgegeben werden, aber das passiert nicht. Wo habe ich den Fehler?
Grüße
HEiko
Heiko - So 10.06.07 14:35
Ich habe es jetzte "notdürftig" hinbekommen:
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26:
| function SetStatusbarText(text){ document.getElementById('statusbar').innerHTML = text; }
function SetStatusbarHint(obj){ obj.onmouseover = function(){ SetStatusbarText(obj.title) }; obj.onmouseout = function(){ document.getElementById('statusbar').innerHTML = "" }; }
function SetHintMethods(parent){ var node = parent.firstChild; while(node != null) { if (node.nodeType === 1) { if (node.title != "") { SetStatusbarHint(node); } SetHintMethods(node); } node = node.nextSibling; } }
function OnLoad(){ SetHintMethods(document.body); } |
Auch wenn es noch nicht so ist, wie ich es mir gewünscht hätte. Denn am liebste hätte ich, dass statt der Zeile
Quelltext
1:
| SetStatusbarText(obj.title) |
das hier stehen würde:
Quelltext
1:
| SetStatusbarText(this) |
also das trhis dann das Element ist, welches die Funktion aufgerufen hat. Kann ich das irgendwie hinbiegen?
blackbirdXXX - So 17.06.07 01:59
Quelltext
1: 2:
| function foo() { ... }; foo.call({dieses: "object", wird: "this"}, arg1, arg2); |
Hilft dir das?
blackbirdXXX - So 17.06.07 09:56
Wurgs. Bitte kein Prototype. Lieber jQuery.
Das ständige rumgefummle am Object prototype (und auch an allen anderen prototypen) ist nervig bis zum geht nicht mehr.
Ghostwalker - So 17.06.07 16:18
Hab mir grad mal die Jquery angesehen. Ich würde mal sagen, das beide Bibleotheken sich nicht viel schenken. Der Funktionsumfang ist der gleiche. Somit ist das wohl eine Frage des persönlichen Geschmacks :)
Heiko - So 17.06.07 19:06
Hallo,
auf prototype bzw. Jquery möchte ich nicht umsteigen, denn ich arbeite an einem Browsergame mit und da ist jeder gesparte Byte wertvoll (u.a. deswegen die auslaggerung der Hints, da das vom Browser ja schlecht gecacht wird) ;). Und ich schätze mal, dass das doch kein all zu kleines Paket ist, was die Erweiterungen da erst einmal übertragen müssen. Oder was habt ihr da fürne Erfahrungen?
Und nicht zu vergessen: Als kommerzielles Projekt muss man die Lizenzen mitbeachten, und da möchte ich uns lieber nicht von irgendeinem Projekt abhängig machen;).
blackbirdXXX hat folgendes geschrieben: |
Quelltext 1: 2:
| function foo() { ... }; foo.call({dieses: "object", wird: "this"}, arg1, arg2); |
Hilft dir das? |
Mhm, mit der zweiten Zeile kann ich nicht viel Anfangen, denn "dieses" und "wird" gibt es bestimmt unter JS nicht. (Deutsch unter JS??) ;).
Grüße
Heiko
Ghostwalker - So 17.06.07 19:25
Die größe dürfte kein Problem sein, da es sich ja um eine extra Datei handelt die nur 1 mal übertragen werden muß (landet dann im Cache :) ). Bei Prototype sinds 94 KByte und bei JQuery 55 KByte. Da beide unter der MIT-Lizenz stehen sollte es auch kein Problem damit geben :)
blackbirdXXX - Mo 18.06.07 18:20
Heiko hat folgendes geschrieben: |
blackbirdXXX hat folgendes geschrieben: | Quelltext 1: 2:
| function foo() { ... }; foo.call({dieses: "object", wird: "this"}, arg1, arg2); |
Hilft dir das? |
Mhm, mit der zweiten Zeile kann ich nicht viel Anfangen, denn "dieses" und "wird" gibt es bestimmt unter JS nicht. (Deutsch unter JS??) ;). |
Quelltext
1: 2: 3:
| var diesesObjectWirdThis = new FooObject(); function foo() { ... }; foo.call(diesesObjectWirdThis, arg1, arg2); |
Verständlicher?
Heiko - Mo 18.06.07 18:32
k, ja. Ich weiß nur noch nicht, auf welcher Art es mir etwas bringen soll (blt. ahbe ich auch nur ein Brett vorm Kopf... :( )
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!