Die Signatur der jQuery-Funktion .on
ist
$ (elements) .on (Ereignisse [, Selektor] [, Daten], Handler);
wobei selector
und data
optional sind. Daher der Funktionsaufruf
$ (Elemente) .on (var1, var2, var3);
könnte mit var2
entweder als selector
oder als data
interpretiert werden. Gibt es Mehrdeutigkeit?
Wie wird im Allgemeinen die Mehrdeutigkeit von optionalen Parametern für andere jQuery-Funktionen behandelt?
Wenn nur einer der Selektor- und Datenparameter bereitgestellt wird und der Wert eine Zeichenkette ist, wird davon ausgegangen, dass es sich um einen Selektor handelt.
Von jQuery doco für .on()
:
Das Datenargument kann ein beliebiger Typ sein. Wenn jedoch eine Zeichenfolge verwendet wird, muss der Selektor entweder bereitgestellt oder explizit als Null übergeben werden, damit die Daten nicht als Selektor interpretiert werden. Es empfiehlt sich, ein Objekt (Map) zu verwenden, damit mehrere Werte als Eigenschaften übergeben werden können.
Ein ähnliches Prinzip gilt für andere jQuery-Methoden mit optionalen Parametern.
Für das von Ihnen angegebene Beispiel erwarten die Argumente selector
und data
verschiedene Objekttypen. Das selector
Argument sollte ein String sein und data
sollte ein Objekt sein. Sie können zwischen dem Operator typeof
unterscheiden. Zum Beispiel:
Beachten Sie, dass wenn Sie eine Zeichenfolge in on
als data
-Argument übergeben müssten, das Argument selector
ebenfalls angegeben werden müsste (selbst wenn Sie nur null
übergeben).
Hier ist ein bisschen von der jQuery-Quelle. Im Grunde betrachten sie die Arten der Parameter und weisen sie bei Bedarf anderen Parametern zu. Wenn beispielsweise das Element in der Position "selector" in der Parameterliste keine Zeichenfolge ist, wird angenommen, dass es sich um den Parameter "data" handeln soll usw.
%Vor%Ich habe auch meine eigenen Bedenken mit .on () ...
Der Kontext von this
war immer sehr klar mit delegate vs bind (oder einer Verknüpfung von bind). Jetzt mit on
kann sich der Kontext sehr plötzlich ändern ...
Zum Beispiel
%Vor% Dies ist die erste jQuery-Methode, die jemals den Kontext von this
geändert hat, indem nur ein anderes Argument übergeben wurde.
Schnelle Tatsache - delegate
- (in 1.4.2) war die erste Methode, die den Selektor nicht verwendete, um den Kontext für die Callback-Funktion darzustellen. Aber zumindest war es immer noch klar ... wenn du .delegate () siehst, verstehst du was passiert.
Tags und Links javascript jquery