| | | | |
| |||||||
| JavaScript, Ajax und mehr dynamisches Scripten und Interaktion auf Clientebene |
|
| | LinkBack | Themen-Optionen | Thema bewerten |
| | |
| Erfahrener Benutzer | Guten Abend allerseits, ich versuche grad ein wenig meine ersten Gehversuche mit Javascript und OOP. Hier mein Code. Code: function ShowHideElement(idEvent, idElem)
{
this.idEvent = idEvent;
this.idElem = idElem;
}
ShowHideElement.prototype.show = function(pEvent)
{
document.getElementById(this.idElem).class = 'com_form_show';
}
ShowHideElement.prototype.event = function(pEvent)
{
if(document.addEventListener) {
document.getElementById(this.idEvent).addEventListener('click', this.show, false);
} else {
document.getElementById(this.idEvent).attachEvent('onclick', this.show);
}
}
Code: var comForm = new ShowHideElement('show_com_form', 'comment_form_container');
comForm.show();
comForm.event();
Aber ich bekomme bei Eventversuch die Fehlermeldung das die ID die in this.idElem steht null ist. Was mache ich da falsch und muss ich ändern? Vielen Dank für eure Hilfe Gruß Litter
__________________ Aus dem Dynamo Lande kommen wir. Trinken immer reichlich kühles Bier. Und dann sind wir alle voll, die Stimmung ist so toll. Aus dem Dynamo Lande kommen wir. http://www.lit-web.de |
| | |
| | |
| PHP Code Flüsterer Registriert seit: 21.08.2005 Beiträge: 4682 PHP-Kenntnisse: Fortgeschritten | |
| | |
| Supermoderator HD Registriert seit: 16.03.2008
Beiträge: 8.695
PHP-Kenntnisse: Fortgeschritten ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() | Was du beschreibst, hängt vermutlich mit Closures zusammen. Wenn du die Kontext-Referenz this in Event-Callbacks verwendet, verweist sie natürlich auf das Element, das das Event ausgelöst hat. Ein häufig missachteter Stolperstein. Du musst den Kontext vorher in einer anderen Variablen speichern.
__________________ Refining Linux Advent Calendar series “24 Outstanding ZSH Gems” |
| | |
| | ||
| moderatives Dielektrikum Registriert seit: 21.05.2008
Beiträge: 35.879
PHP-Kenntnisse: Fortgeschritten ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() | Zitat:
Btw. würde ich Dir raten, im Objekt nicht die ID, sondern eine Referenz auf den DOM Knoten zu speichern. Sonst must getById jedesmal neu den DOM Tree durchackern.
__________________ -- One pixel is still too big. Please make it smaller. ASAP. Initiative Mittelstand. Die wichtigste Gestaltungsregel im Screendesign ist Pi mal Daumen des Arbeitgebers. -- | |
| | |
| | |
| Supermoderator HD Registriert seit: 16.03.2008
Beiträge: 8.695
PHP-Kenntnisse: Fortgeschritten ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() | Meiner Meinung nach sollte jeder zumindest anfänglich einmal Bare-Metal-JavaScript schreiben. Habe ich auch gemacht. Wenn man später für den produktiven Einsatz Frameworks einsetzt ist das vollkommen in Ordnung. Aber genauso wie man PHP nicht anhand gigantischer Libraries lernt, sondern anhand simpler Hallo-Welt-Programme, sollte man auch erst einmal die Grundstruktur von JavaScript verstanden haben. Im Übrigen ein kleiner Tipp: auf attachEvent() kannst du mittlerweile verzichten. Nutze einfach addEventListener(), das reicht. Dann wird das auch mit den Closures einfacher, weil du dann einfach eine anonyme Methode für das Event-Callback nutzen kannst ohne redundanten Code schreiben zu müssen: ***Code-Schnipsel weiter unten***
__________________ Refining Linux Advent Calendar series “24 Outstanding ZSH Gems” |
| | |
| | |
| Supermoderator HD Registriert seit: 16.03.2008
Beiträge: 8.695
PHP-Kenntnisse: Fortgeschritten ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() | Err, das sollte eigentlich auch andersherum gemeint sein. this kann man sowieso keinen Wert zuweisen. Auf den Prototypen-Kontext habe ich jetzt gar nicht geachtet und einfach nur das Codeschnipsel übernommen. Oje. So ist es gemeint: Code: function ShowHideElement(idEvent, idElem)
{
this.idEvent = idEvent;
this.idElem = idElem;
this.show = function(pEvent)
{
var that = this;
document.getElementById(this.idEvent).addEventListener('click', function() {
document.getElementById(that.idElem).class = 'com_form_show';
}, false);
}
}
__________________ Refining Linux Advent Calendar series “24 Outstanding ZSH Gems” |
| | |
|
| Themen-Optionen | |
| Thema bewerten | |
|
|
Ähnliche Themen | ||||
| Thema | Autor | Forum | Antworten | Letzter Beitrag |
| [Erledigt] Javascript array prototyping in namespace | rudygotya | JavaScript, Ajax und mehr | 2 | 12.10.2009 14:45 |