onclick Funktion beibehalten
T-Rex
- javascript
Hallo nochmals *Seufz*
ich möchte eine Funktion die auf einem Eventhandler bereits sitzt beibehalten.
Also im prinzip sowas (pseudocode)
onclick = funtion;
if (onclick hat function)
{
onclick = alte functionen + neue function;
}
wenn ich ein zweites mal
onclick = function
schreibe, dann überschreibe ich die erste gesetzte Funktion.
Wäre super wenn es da was geben würde :).
Mahlzeit
T-REx
Hallo!
ich möchte eine Funktion die auf einem Eventhandler bereits sitzt beibehalten.
wenn ich ein zweites mal
onclick = function
schreibe, dann überschreibe ich die erste gesetzte Funktion.
Schau dir mal http://www.quirksmode.org/js/events_advanced.html an.
Gruß, Jan
Mit dem traditionellen Event-Handling lassen sich mehrere Handler-Funktionen nur über komplizierte Umwege lösen, siehe Nachteile des traditionellen Event-Handlings.
Für solche Fälle solltest du dir eine Helferfunktion zulegen, die je nach Verfügbarkeit die moderneren W3C- oder das Microsoft-Modelle nutzt. Siehe etwa A Good Enough addEvent:
function addEvent (obj, type, fn) {
if (obj.addEventListener) {
obj.addEventListener(type, fn, false);
} else if (obj.attachEvent) {
obj.attachEvent('on' + type, function() {
return fn.call(obj, window.event);
});
}
}
Anwendungsbeispiel:
function clickHandler () {
// Meine Handlerfunktion
}
addEvent(document.getElementById("meinElement"), "click", clickHandler);
Oder mit anonymer Funktion:
addEvent(document.getElementById("meinElement"), "click", function () {
// Meine Handlerfunktion
});
Mathias
Mit dem traditionellen Event-Handling lassen sich mehrere Handler-Funktionen nur über komplizierte Umwege lösen, siehe Nachteile des traditionellen Event-Handlings.
Für solche Fälle solltest du dir eine Helferfunktion zulegen, die je nach Verfügbarkeit die moderneren W3C- oder das Microsoft-Modelle nutzt. Siehe etwa A Good Enough addEvent:
function addEvent (obj, type, fn) {
if (obj.addEventListener) {
obj.addEventListener(type, fn, false);
} else if (obj.attachEvent) {
obj.attachEvent('on' + type, function() {
return fn.call(obj, window.event);
});
}
}
>
> Anwendungsbeispiel:
>
> ~~~javascript
function clickHandler () {
> // Meine Handlerfunktion
> }
> addEvent(document.getElementById("meinElement"), "click", clickHandler);
Oder mit anonymer Funktion:
addEvent(document.getElementById("meinElement"), "click", function () {
// Meine Handlerfunktion
});
>
> Mathias
Hallo,
Mensch Mathias....am besten gibst du mir deine ICQ Nummer, denn du hast immer die richtigen Sachen parat. Bislang funktioniert das ausgesprochen super :).
Gibts sowas auch in die andere Richtung? Also eine Bestimmte funktion wegnehmen?
Beispiel:
onclick = function1(),function2();
deleteEvent(onclick,function2());
-> onclick = function1();
vielen Dank
Gruß
T-Rex
Hi!
Gibts sowas auch in die andere Richtung? Also eine Bestimmte funktion wegnehmen?
Dazu gibt es die Methoden removeEventListener (W3C) bzw. detachEvent (IE).
Eine eigene Funktion, die für alle Browser funktioniert, kannst du dir analog
zu der, die dir Mathias gepostet hat, bauen.
Gruß, Jan
Gibts sowas auch in die andere Richtung? Also eine Bestimmte funktion wegnehmen?
das steht doch auf den verlinkten Seiten?
Struppi.
Gibts sowas auch in die andere Richtung? Also eine Bestimmte funktion wegnehmen?
das steht doch auf den verlinkten Seiten?
Im attachEvent
-Zweig wird allerdings ein Funktionsobjekt erzeugt, davon ist keine Referenz nach außen verfügbar - das Entfernen selbiger halte ich also nicht für trivial.
Im
attachEvent
-Zweig wird allerdings ein Funktionsobjekt erzeugt, davon ist keine Referenz nach außen verfügbar - das Entfernen selbiger halte ich also nicht für trivial.
Ja, das ist ein Nachteil dieser bewusst einfach gehaltenen addEvent-Lösung. Die Wrapperfunktion ist nötig, damit der Handler im Kontext des Elements ausgeführt wird. Wer es komplizierter haben will, nimmt z.B. diese Lösung:
http://dean.edwards.name/my/events.js
Die verzichtet gänzlich auf das Microsoft-Modell und macht alles zu Fuß, dafür gibts ein vernünftiges removeEvent.
Mathias
am besten gibst du mir deine ICQ Nummer, denn du hast immer die richtigen Sachen parat.
Es gibt da eine Dokumentation namens SELFHTML, da schreibe ich alles rein, was ich parat habe, damit es viele Leute immer parat haben, ohne meine ICQ-Nummer zu kennen. Praktisch, nicht?
Mathias