T-Rex: onclick Funktion beibehalten

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

  1. 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

  2. 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

    1. 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
      
      1. 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

      2. Gibts sowas auch in die andere Richtung? Also eine Bestimmte funktion wegnehmen?

        das steht doch auf den verlinkten Seiten?

        Struppi.

        1. 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.

          --
          Reden ist Silber, Schweigen ist Gold, meine Ausführungen sind Platin.
          Self-Code: sh:( ch:? rl:( br:> n4:( ie:{ mo:) va:) de:> zu:} fl:| ss:| ls:~ js:|
          1. 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

      3. 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