Con codice jQuery come:
$("#myid").click(myfunction);
function myfunction(arg1, arg2) {/* something */}
Come si passano gli argomenti myfunctiondurante l'utilizzo di jQuery?
Con codice jQuery come:
$("#myid").click(myfunction);
function myfunction(arg1, arg2) {/* something */}
Come si passano gli argomenti myfunctiondurante l'utilizzo di jQuery?
Risposte:
Il modo più semplice è farlo in questo modo (supponendo che tu non voglia che nessuna delle informazioni sull'evento venga passata alla funzione) ...
$("#myid").click(function() {
myfunction(arg1, arg2);
});
jsFiddle .
Questo crea una funzione anonima, che viene chiamata quando clickviene attivato l' evento. Questo a sua volta chiamerà myfunction()con gli argomenti forniti.
Se vuoi mantenere ThisBinding(il valore di thisquando la funzione viene invocata, impostato sull'elemento che ha attivato l'evento), allora chiama la funzione con call().
$("#myid").click(function() {
myfunction.call(this, arg1, arg2);
});
jsFiddle .
Non puoi passare il riferimento direttamente nel modo in cui afferma il tuo esempio, o il suo unico argomento sarà l' oggetto jQueryevent .
Se non volete passare il riferimento, è necessario sfruttare jQuery proxy()la funzione (che è un wrapper cross browser per Function.prototype.bind()). In questo modo si passa argomenti, che sono legati prima della eventdiscussione.
$("#myid").click($.proxy(myfunction, null, arg1, arg2));
jsFiddle .
In questo esempio, myfunction()potrebbe essere eseguito con la sua ThisBindingintatta ( nullnon è un oggetto, in modo che il normale thisvalore dell'elemento che ha attivato l'evento viene utilizzato), insieme con gli argomenti (in ordine) arg1, arg2ed infine il jQuery eventoggetto, che si può ignorare se non è richiesto (non nominarlo nemmeno negli argomenti della funzione).
Potresti anche usare gli eventoggetti jQuery dataper passare i dati, ma ciò richiederebbe la modifica myfunction()per accedervi tramite event.data.arg1(che non sono argomenti di funzione come menzionati nella tua domanda), o almeno introdurre una funzione proxy manuale come l'esempio precedente o uno generato utilizzando quest'ultimo esempio.
myfunction(this, arg1, arg2)dal gestore anonimo. Quindi la tua funzione può faremyfunction(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'
});
Consente inoltre di associare e svincolare gestori di eventi specifici utilizzando i metodi di attivazione e disattivazione.
Esempio:
$("#myid").off('click', myfunction);
Ciò svincolerebbe il gestore myfunction da #myid
mentre dovresti certamente usare la risposta di Alex, il metodo "bind" della libreria prototipo è stato standardizzato in Ecmascript 5, e sarà presto implementato nativamente nei browser. Funziona così:
jQuery("#myid").click(myfunction.bind(this, arg1, arg2));
thisessere impostato su un contesto diverso, se si utilizza questo metodo, per esempio, bind()ing a thisin quel contesto (globale) può provocare tale gestore click avendo l' windowoggetto come thisal contrario di un riferimento alla #myidelemento?
people reading my answers are smart enough to figure these details out themselves, non su Ecmascript.
Vecchio thread, ma per scopi di ricerca; provare:
$(selector).on('mouseover',...);
... e controlla il parametro "data": http://api.jquery.com/on/
per esempio:
function greet( event ) {
alert( "Hello " + event.data.name );
}
$( "button" ).on( "click", {name: "Karl"}, greet );
$( "button" ).on( "click", {name: "Addy"}, greet );