Mit jQuery-Code wie:
$("#myid").click(myfunction);
function myfunction(arg1, arg2) {/* something */}
Wie übergebe ich Argumente myfunctionbei der Verwendung von jQuery?
Mit jQuery-Code wie:
$("#myid").click(myfunction);
function myfunction(arg1, arg2) {/* something */}
Wie übergebe ich Argumente myfunctionbei der Verwendung von jQuery?
Antworten:
Am einfachsten ist es, dies so zu tun (vorausgesetzt, Sie möchten nicht, dass die Ereignisinformationen an die Funktion übergeben werden) ...
$("#myid").click(function() {
myfunction(arg1, arg2);
});
jsFiddle .
Dadurch wird eine anonyme Funktion erstellt, die beim clickAuslösen des Ereignisses aufgerufen wird. Dies wird wiederum myfunction()mit den von Ihnen angegebenen Argumenten aufgerufen .
Wenn Sie ThisBindingden Wert beibehalten möchten (der Wert, zu thisdem die Funktion aufgerufen wird, setzen Sie ihn auf das Element, das das Ereignis ausgelöst hat), rufen Sie die Funktion mit auf call().
$("#myid").click(function() {
myfunction.call(this, arg1, arg2);
});
jsFiddle .
Sie können die Referenz nicht direkt so übergeben, wie es in Ihrem Beispiel angegeben ist, oder das einzige Argument ist das jQuery- eventObjekt .
Wenn Sie noch die Referenz zu übergeben möchten, müssen Sie jQuery nutzen proxy()Funktion (die eine Cross - Browser - Wrapper ist für Function.prototype.bind()). Auf diese Weise können Sie Argumente übergeben, die vor dem eventArgument gebunden sind .
$("#myid").click($.proxy(myfunction, null, arg1, arg2));
jsFiddle .
In diesem Beispiel myfunction()würde mit seinem ausgeführt wird ThisBindingintakt ( nullkein Objekt ist , so dass der normale thisWert des Elements , das das Ereignis ausgelöst wird), zusammen mit den Argumenten (in dieser Reihenfolge) arg1, arg2und schließlich das jQuery - eventObjekt, 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- eventObjekte verwenden data, um Daten zu übergeben. Dies würde jedoch eine Änderung erfordern, um myfunction()über event.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.
myfunction(this, arg1, arg2)den anonymen Handler auf. Dann kann Ihre Funktion tunmyfunction(el, arg1, arg2) { alert($(el).val()); }
myfunction.call(this, arg1, arg2).
$("#myid").on('click', {arg1: 'hello', arg2: 'bye'}, myfunction);
function myfunction(e) {
var arg1 = e.data.arg1;
var arg2 = e.data.arg2;
alert(arg1);
alert(arg2);
}
//call method directly:
myfunction({
arg1: 'hello agian',
arg2: 'bye again'
});
Außerdem können Sie bestimmte Ereignishandler mithilfe der Ein- und Ausschaltmethoden binden und die Bindung aufheben.
Beispiel:
$("#myid").off('click', myfunction);
Dies würde den myfunction handler von #myid lösen
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:
jQuery("#myid").click(myfunction.bind(this, arg1, arg2));
thisSatz zu einem anderen Kontext, wenn Sie diese Methode verwenden, zum Beispiel, um bind()es zu ing thisin diesem Zusammenhang (global) in diesem Click - Handler führen kann , die mit windowals Objekt im thisGegensatz zu dem auf ein #myidReferenzelement?
people reading my answers are smart enough to figure these details out themselves, nicht für Ecmascript.
Alter Thread, aber zu Suchzwecken; Versuchen:
$(selector).on('mouseover',...);
... und überprüfen Sie den Parameter "data": http://api.jquery.com/on/
z.B:
function greet( event ) {
alert( "Hello " + event.data.name );
}
$( "button" ).on( "click", {name: "Karl"}, greet );
$( "button" ).on( "click", {name: "Addy"}, greet );