Mit jQuery-Code wie:
$("#myid").click(myfunction);
function myfunction(arg1, arg2) {/* something */}
Wie übergebe ich Argumente myfunction
bei der Verwendung von jQuery?
javascript
jquery
Edward Wong Hau Pepelu Tivrusk
quelle
quelle
Antworten:
Am einfachsten ist es, dies so zu tun (vorausgesetzt, Sie möchten nicht, dass die Ereignisinformationen an die Funktion übergeben werden) ...
jsFiddle .
Dadurch wird eine anonyme Funktion erstellt, die beim
click
Auslösen des Ereignisses aufgerufen wird. Dies wird wiederummyfunction()
mit den von Ihnen angegebenen Argumenten aufgerufen .Wenn Sie
ThisBinding
den Wert beibehalten möchten (der Wert, zuthis
dem die Funktion aufgerufen wird, setzen Sie ihn auf das Element, das das Ereignis ausgelöst hat), rufen Sie die Funktion mit aufcall()
.jsFiddle .
Sie können die Referenz nicht direkt so übergeben, wie es in Ihrem Beispiel angegeben ist, oder das einzige Argument ist das jQuery-
event
Objekt .Wenn Sie noch die Referenz zu übergeben möchten, müssen Sie jQuery nutzen
proxy()
Funktion (die eine Cross - Browser - Wrapper ist fürFunction.prototype.bind()
). Auf diese Weise können Sie Argumente übergeben, die vor demevent
Argument gebunden sind .jsFiddle .
In diesem Beispiel
myfunction()
würde mit seinem ausgeführt wirdThisBinding
intakt (null
kein Objekt ist , so dass der normalethis
Wert des Elements , das das Ereignis ausgelöst wird), zusammen mit den Argumenten (in dieser Reihenfolge)arg1
,arg2
und schließlich das jQuery -event
Objekt, das Sie ignorieren können wenn es nicht erforderlich ist (benennen Sie es nicht einmal in den Argumenten der Funktion).Sie können auch die jQuery-
event
Objekte verwendendata
, um Daten zu übergeben. Dies würde jedoch eine Änderung erfordern, ummyfunction()
überevent.data.arg1
(die keine Funktionsargumente sind, wie in Ihren Fragen erwähnt) darauf zuzugreifen , oder zumindest eine manuelle Proxy-Funktion wie das vorherige Beispiel oder eine generierte mit dem letzteren Beispiel.quelle
myfunction(this, arg1, arg2)
den anonymen Handler auf. Dann kann Ihre Funktion tunmyfunction(el, arg1, arg2) { alert($(el).val()); }
myfunction.call(this, arg1, arg2)
.Außerdem können Sie bestimmte Ereignishandler mithilfe der Ein- und Ausschaltmethoden binden und die Bindung aufheben.
Beispiel:
Dies würde den myfunction handler von #myid lösen
quelle
Während Sie auf jeden Fall Alex 'Antwort verwenden sollten, wurde die "Bind" -Methode der Prototypbibliothek in Ecmascript 5 standardisiert und wird bald nativ in Browsern implementiert. Es funktioniert so:
quelle
this
Satz zu einem anderen Kontext, wenn Sie diese Methode verwenden, zum Beispiel, umbind()
es zu ingthis
in diesem Zusammenhang (global) in diesem Click - Handler führen kann , die mitwindow
als Objekt imthis
Gegensatz zu dem auf ein#myid
Referenzelement?people reading my answers are smart enough to figure these details out themselves
, nicht für Ecmascript.Alter Thread, aber zu Suchzwecken; Versuchen:
... und überprüfen Sie den Parameter "data": http://api.jquery.com/on/
z.B:
quelle
Es gibt bereits gute Antworten, aber hier sind meine zwei Cent. Sie können auch verwenden:
$("#myid").click({arg1: "foo", arg2: "bar"}, myfunction)
Und der Hörer würde aussehen wie:
function myfunction(event){ alert(event.data.arg1); alert(event.data.arg2); }
quelle
Einfach:
quelle