[jQuery] Eventhandler entfernen

// https://api.jquery.com/click/

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width">
  <title>jQuery Button-Klick</title>
</head>
<body>
  <button id="btn1">Klick mich!</button>
</body>
</html>

// Button mit id="btn1": Eventhandler registrieren
$("#btn1").on("click", function(evt){
  console.log(evt.target);
  $(this).fadeOut();
});

// Button mit id="btn1": Eventhandler deregistrieren
$("#btn1").off("click");

[jQuery] Eventhandler registrieren

// https://www.w3schools.com/jquery/jquery_events.asp

// Beispiel ($(document).ready)
<!DOCTYPE html>
<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script>
// mehrere Eventhandler für ein Objekt registrieren
$(document).ready(function(){
    $("#p1").on({
    	mouseenter : function(){
            $(this).html("Entered");
    	},
    	mouseleave : function(){
            $(this).html("Left");
    	}
		})
});
</script>
</head>
<body>
<p id="p1">Enter this paragraph.</p>
</body>
</html>

[jQuery] Eventhandler registrieren – shortcut

// https://www.w3schools.com/jquery/jquery_events.asp

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width">
  <title>jQuery Button-Klick</title>
</head>
<body>
  <button id="btn1">Klick mich!</button>
</body>
</html>

// Button mit id="btn1": Eventhandler mit Parameter "evt" registrieren
$("#btn1").click(function(evt){
  // target ausgeben
  console.log(evt.target);
  // Button ausblenden
  $(this).fadeOut();
});

Events erstellen, auslösen, abarbeiten, entladen (Template ohne delegat)

// Argumente, die beim Auslösen des Events übergeben werden, definieren
public class MyEventArgs : EventArgs
{
    // Rückgabewert des Events (Zugriff mit e.iValue)
    public readonly int iValue;
    
    public MyEventArgs(int val)
    {
        iValue = val;
    }
}

// Klasse, die den Event auslöst
public class MyClass
{
    // Eventhandler
    public event EventHandler<MyEventArgs-> MyEvent;

    public int a;
    public int b;

    public int Calc()
    {
        int iRetVal = a + b;

        // wenn Event abgefragt werden soll
        if (MyEvent != null)
        {
            // Event auslösen
            MyEvent(this, new MyEventArgs(iRetVal);
        }

        return iRetVal;
    }       
}

Anwendungsbeispiel:

// irgendwo im Programm (Formular)
// Objekt der Klasse, die das Event auslöst, definieren
MyClass mc = new MyClass();
// Funktion, die beim Auslösen des Events anspricht, anmelden
mc.MyEvent += new EventHandler<MyEventArgs->(MyCalcEventhandler);
// etwas rechnen und implizit das Event auslösen
mc.a = 5;
mc.b = 7;
mc.Calc();

// Funktion, die beim Auslösen des Events abgearbeitet wird
private void MyCalcEventhandler(object sender, MyEventArgs e)
{
     Console.WriteLine(e.iValue);
     Console.WriteLine(e.iValue);
}

Manchmal kommt es vor, dass man die hinzugefügten Eventhandler auch wieder entfernen will, dazu folgendes erweitertes Anwendungsbeispiel:

// globale Referenz auf den EventHandler anlegen (&quot;Merker&quot;)
private EventHandler<MyEventArgs-> _MyEvent = null;

...

MyClass mc = new MyClass();

// EventHandler erzeugen
_MyEvent = new EventHandler<MyEventArgs->(MyCalcEventhandler);
// EventHandler hinzufügen
mc.MyEvent += _MyEvent;

...

// EventHandler wieder entfernen
mc.MyEvent -= _MyEvent;