Auf Prototypen von HTML Objekt zugreifen!?
Christian S.
- javascript
Hi,
ich möchte folgendes realisieren:
Im Moment greife ich auf den Wert einer Selectbox mittels:
selectbox.options[selectbox.selectedIndex].value zu.
Das ist mir langsam zu lästig und ich frage mich ob dies auch einfacher geht.
Allen Selectboxen möchte ich die Property selectedValue verpassen, die mir genau oben das zurückgibt.
meinetwegen auch als Methode.
Dazu muss ich doch auf den Prototypen der selectbox zugreifen und dann etwa so was machen:
Selectbox.prototype.selectedValue = this.options[this.selectedIndex].value;
mit dem Date Objekt geht es ja auch (wenn ich es um eigene Methoden erweitern will):
// Beispiel:
Date.prototype.addDays = function ()
{
};
var date = new Date();
date.addDays();
Die Frage ist jetzt nur: wie komme ich an die Konstrukturen von den Selectboxen dran??
Geht das überhaupt?? Das wäre fast schon zu schön, dann könnte ich ja zB. auch das Event Objekt standardisieren:
Event.prototype.target = (this.target) ? this.target : this.srcElement;
Gruß
Christian
Selectbox.prototype.selectedValue = this.options[this.selectedIndex].value;
mit dem Date Objekt geht es ja auch (wenn ich es um eigene Methoden erweitern will):
// Beispiel:
Date.prototype.addDays = function ()
{
};var date = new Date();
date.addDays();Die Frage ist jetzt nur: wie komme ich an die Konstrukturen von den Selectboxen dran??
Selectbox.prototype.selectedValue = function () {this.options[this.selectedIndex].value;
}
Selectbox.selectedValue();
Schon versucht?
Hi,
Allen Selectboxen möchte ich die Property selectedValue verpassen, die mir genau oben das zurückgibt.
meinetwegen auch als Methode.
das solltest Du tun, den ansonsten müsstest Du einen Getter bauen ...
Selectbox.prototype.selectedValue = this.options[this.selectedIndex].value;
... anstatt ihm den in diesem Moment vorliegenden Wert von window.options[window.selectedIndex] zuzuweisen - oder was immer 'this' im Kontext der Zuweisung ist.
Die Frage ist jetzt nur: wie komme ich an die Konstrukturen von den Selectboxen dran??
Exakt so wie bei Date-Objekten, nur dass es ein HTMLSelectElement-Objet ist. Es gibt dann nur noch das klitzekleine Problemchen, dass Du am IE scheitern wirst, sofern Dir keine Zeitmaschine zur Verfügung steht.
Das wäre fast schon zu schön, dann könnte ich ja zB. auch das Event Objekt standardisieren:
Ja, kannst Du. Außer im IE, versteht sich, der wie so oft zu blöd zum Kacken ist.
Event.prototype.target = (this.target) ? this.target : this.srcElement;
Es ist bei derlei Dingen allerdings zumeist wenig sinnvoll, eine Konstante zu erzeugen.
Cheatah
Hi,
Exakt so wie bei Date-Objekten, nur dass es ein HTMLSelectElement-Objet ist. Es gibt dann nur noch das klitzekleine Problemchen, dass Du am IE scheitern wirst, sofern Dir keine Zeitmaschine zur Verfügung steht.
cool klappt... Gibts da keine Workarounds für den IE?? muss auch erst ab IE 6 klappen... Irgendwas mit ActiveX?
Gruß
Christian
Hi,
Gibts da keine Workarounds für den IE??
mir sind keine bekannt. Der IE ist und bleibt eine Spaß- und Technikbremse.
Cheatah
hallo again Christian S.
...
selectbox.options[selectbox.selectedIndex].value zu.Das ist mir langsam zu lästig und ich frage mich ob dies auch einfacher geht.
...
Selectbox.prototype.selectedValue = this.options[this.selectedIndex].value;
...
wenn schon, dann doch eher so:
HTMLSelectElement.prototype ...
... gecko-engines sind aber die einzigen, die Dir diesen ansatz auch fuer das
DOM ermoeglichen.
gerade in diesem fall muss man JavaScript und DOM scharf trennen (eigentlich
sollte man das immer). die ECMAScript-spezifikation, die als richtlinie fuer
JavaScript-implementierungen herangezogen werden muss, schreibt prototyping
nur fuer den sprachkern vor. implementierungen anderer spezifikationen, wie
z.b. DOM muessen zwar kompatible schnittstellen zur verfuegung stellen, selbst
aber nicht dem standard des JavaScript-sprachkerns genuegen.
waehle einen anderen praxisgerechteren ansatz ;-)
by(t)e by(t)e - peterS. - pseliger@gmx.net
Hallo,
HTMLSelectElement.prototype ...
... gecko-engines sind aber die einzigen, die Dir diesen ansatz auch fuer das
DOM ermoeglichen.
Glaub ich nicht. Gerade erfolgreich mit Presto getestet.
Viele Grüße
gruss Nerog,
Glaub ich nicht. Gerade erfolgreich mit Presto getestet.
ja ok, tut mir leid, dass ich opera unterschlagen habe -
der kann das seit version 8 (oder sogar schon 7?) auch.
so long - peterS.