this.innerHTML in externer Datei
Jean Pascal
- javascript
0 Ashura0 Jean Pascal1 wahsaga
0 molily
0 Jean Pascal0 Struppi
0 Struppi
Guten Tag,
ich habe hier etwas Code, den ich gerne in einer externen js-Datei auslagern möchte:
<p onMouseOver="this.innerHTML = 'test2'" onMouseOut="this.innerHTML = 'test'">test</p>
Da die Zeichenketten test und test2 am Ende etwas länger werden, würde ich sie also gerne als Funktionen hereinladen. In etwa so:
<p class="menu" onMouseOver="show()" onMouseOut="hide()">test</p>
extern:
function show () {this.innerHTML = 'test2';}
function hide () {this.innerHTML = 'test';}
Und diese Variante funktioniert in der Form leider noch nicht. Kann mir eventuell jemand erklären, welchen Fehler ich gemacht habe?
Vielen Dank.
Jean
Hallo Jean.
<p class="menu" onMouseOver="show()" onMouseOut="hide()">test</p>
extern:
function show () {this.innerHTML = 'test2';}
function hide () {this.innerHTML = 'test';}
>
> Und diese Variante funktioniert in der Form leider noch nicht. Kann mir eventuell jemand erklären, welchen Fehler ich gemacht habe?
Du übergibst keine Referenz auf das p-Element.
Das this in obigen beiden Funktionen steht mangels dieser Referenz für die oberste Objektinstanz, also dem window-Objekt.
Du musst schon this als Parameter an die beiden Funktionen übergeben und damit weiter arbeiten.
Einen schönen Mittwoch noch.
Gruß, Ashura
--
sh:( fo:} ch:? rl:( br: n4:~ ie:{ mo:| va:) de:> zu:} fl:( ss:) ls:[ js:|
[<mathbr:del.icio.us/>](http://del.icio.us/mathbr) [<mathbr:w00t/>](http://w00t.noctus.net)
Hallo Ashura,
erstmal danke.
Ich bin davon ausgegangen, dass die Funktion einfach das "hereinlädt", was ich in der externen Datei innerhalb der Funktion stehen habe (womit es ja funktioniert hätte).
Mir ist nicht klar, wie ich auf p referenzieren kann. "this" als Parameter? Parameter werden doch über die Klammer nach der Funktion übergeben, oder? Wenn ich das dort reinschreibe gibt es keine Auswirkung (Ich weiß, hier fehlt es wohl an Basiswissen).
Gruß Jean
hi,
"this" als Parameter? Parameter werden doch über die Klammer nach der Funktion übergeben, oder? Wenn ich das dort reinschreibe gibt es keine Auswirkung
Dann solltest du vielleicht deine Funktion a) mit einem Parameter deklarieren, und b) diesen innerhalb der Funktion auch verwenden.
gruß,
wahsaga
Hallo,
<p class="menu" onMouseOver="show()" onMouseOut="hide()">test</p>
function show () {this.innerHTML = 'test2';}Und diese Variante funktioniert in der Form leider noch nicht. Kann mir eventuell jemand erklären, welchen Fehler ich gemacht habe?
Siehe die Bedeutung von this beim Event-Handling (englisch).
this verweist, wenn es in einer Funktion verwendet wird, die ganz normal aufgerufen wird, auf das Objekt window (denn diese Funktion ist eine Methode von window).
Du hast zwei Möglichkeiten:
function funktion () {
alert(this);
}
document.getElementById("id").onmouseover = funktion;
<p onmouseover="show(this)">test</p>
Die Funktion nimmt dann als ersten Parameter das p-Elementobjekt an.
function show (element) {
element.innerHTML = "...";
}
So gelingt der Zugriff.
Mathias
Hallo Mathias,
danke für die ausführliche Erläuterung. Ich habe mir den Text mal durchgelesen, aber ich habe das Gefühl, ich muss etwas weiter vorne anfangen...
Ich habe es zwar mal versucht, wie du sagtest (ohne es richtig zu verstehen), aber das ging wie folgt leider auch nicht:
<p onMouseOver="show(this)" onMouseOut="hide(this)">test</p>
extern:
function show (p) {p.this.innerHTML = 'test2';}
function hide (p) {p.this.innerHTML = 'test';}
Naja, jetzt arbeite ich mit Struppis Lösung, denn dieser Ansatz war ja ohnehin von hinten durch die Brust ins Auge. Trotzdem schade.
Danke nochmals. Jean
Ich habe es zwar mal versucht, wie du sagtest (ohne es richtig zu verstehen), aber das ging wie folgt leider auch nicht:
Du warst aber auf den richtigen weg.
<p onMouseOver="show(this)" onMouseOut="hide(this)">test</p>
extern:
function show (p) {p.this.innerHTML = 'test2';}
function hide (p) {p.this.innerHTML = 'test';}
this ist das Objekt und dann übergibst du dies als Parameter mit dem Namen p, d.h. in der Funktion ist p = this im HTML Tag, folglich brauchst du in der Funktion nur p.innerHTML
Struppi.
Genial. Jetzt funktioniert Beides :-).
ich habe hier etwas Code, den ich gerne in einer externen js-Datei auslagern möchte:
<p onMouseOver="this.innerHTML = 'test2'" onMouseOut="this.innerHTML = 'test'">test</p>
Da die Zeichenketten test und test2 am Ende etwas länger werden, würde ich sie also gerne als Funktionen hereinladen. In etwa so:
<p class="menu" onMouseOver="show()" onMouseOut="hide()">test</p>
extern:
function show () {this.innerHTML = 'test2';}
function hide () {this.innerHTML = 'test';}
Warum deklarierst du nicht einfach eine Textvariabel?
var text = [ 'test2', 'test'];
<p class="menu" onMouseOver="innerHTML = text[0]"
onMouseOut="innerHTML = text[1]">test</p>
Struppi.
Hallo Struppi,
da hatte ich auch schon drüber nachgedacht, vorallem, weil ich die anderen Erlärungen einfach noch nicht verstehe (liegt eben an meinem Kenntnisstand).
Aber selbst wenn ich exakt deinen Code verwende, will es nicht funktionieren.
Gruß Jean
Mein Fehler!
Es funktioniert doch, wie du gesagt hast.
Vielen Dank. Jean