2010-07-28 15 views
6

Sto definendo la funzione func1(); Voglio che prendere un po 'param (s) vale a direchiamata funzione definita dall'utente con parametri

var func1(aaa, bbb){ 
//do something, anything! 
}; 

allora voglio chiamarla più tardi nel doc qualcosa di simile:

$('#some_id').click(func1($this)); 

ma non il suo lavoro.

Sono stato a pasticcio per un po 'ma è molto strano il modo in cui jquery/javascript gestisce le funzioni definite dall'utente almeno per me. Qualcuno può fornirmi un semplice frammento di codice? Thx

+0

mentre siete qui, non dimenticate di accettare corretta rispondi .. saluti :) – Reigel

+1

Vedi: http://stackoverflow.com/questions/2316158/jquery-how-do-you-pass-this-as-function-parameter/2316194#2316194 – deceze

risposta

6

Se tutto quello che desidera passare è $(this), non occorre il parametro, in quanto sarà disponibile all'interno della funzione definita.

$('#some_id').click(func1); 

Tuttavia, non è possibile aggiungere i parametri in questo modo:

$('#some_id').click(func1(param1, param2)); 

Poi, per la definizione della funzione, basta

function func1() { } 

Se si vuole parametri diversi $ (questo), sarà necessario effettuare quanto segue:

$('#some_id').click(function() { 
    func1(aaa, bbb); }); 
+2

Il valore di 'this' sarà non fa riferimento all'elemento quando chiamate 'func1' in quel modo. – user113716

+0

@patrick, spero che tu non ti stia riferendo a '$ ('# some_id'). Click (func1); perché lo fa .. – Reigel

+0

@Reigel - Avrei dovuto essere più chiaro. Quando ho detto "call' func1' in quel modo "intendevo chiamarlo dall'interno della funzione anonima nell'ultimo esempio. Penso al primo esempio come * passing * 'func1'. – user113716

1

Dovrebbe essere

function func1(aaa, bbb) { ... } 
1

Ecco un rapido esempio:

Assicurarsi di definire la funzione con function. Quindi quando vuoi chiamarlo da jQuery, you should use an inline function within click().

<div>Click Me!</div> 
<div>Pick this one!</div> 
<script type="text/javascript"> 
function func1(aaa, bbb) 
{ 
    alert('You clicked the DIV that said: "' + aaa.innerHTML + '" and ' + bbb); 
};   
$('div').click(function() 
{ 
    func1(this, "that's ok."); 
}); 
</script>   
0

Non è possibile farlo come $('#some_id').click(func1($this)); a causa della definizione .click(handler(eventObject)) ... se lo si chiama in questo modo, $this in func1($this) è previsto come eventObject.

per questo, è possibile utilizzare .bind() e event.data.

demo

per esempio ..

function sum(event) { 
    alert(event.data.x + event.data.y); 
    // `this` here would refer to the element calling this function 
    // for example, $(this).attr('id') would return `someID` if called below 
} 

chiamano come

$('#someID').bind('click',{x:4, y:5}, sum); 
5

Presumo si sta cercando di fare in modo che this fa ancora riferimento l'elemento che ha ricevuto l'evento.

Provalo:http://jsfiddle.net/jKM9s/

$('#some_id').click(function() { 
    func1.call(this, 'somearg', 'somearg'); 
}); 

    // now "this" references the element when func1 is called 
function func1(aaa, bbb){ 
    //do something, anything! 
}; 

EDIT:

Se tutto quello che volevi era riferimento all'elemento cliccato, poi vedere @ prima soluzione di phoffer.

+0

Sono d'accordo che dipende solo da ciò che l'OP intende fare. Sfortunatamente, sembra aver dimenticato di tornare ad esso. –

+0

@phoffer - Sì, succede troppo spesso. Un gruppo di persone desiderose di aiutare, ma senza interazione. Probabilmente non è abituato a ricevere risposte così rapidamente. – user113716

+0

Hai perfettamente ragione. Quello che cerco di fare se faccio una domanda è assicurarmi di essere libero per l'ora successiva, solo per lo scopo di interagire. Quando tutti lavorano insieme, questo sito è straordinario. –

0

In Javascript, non è possibile assegnare una funzione e passare argomenti allo stesso tempo. Utilizzare una funzione anonima ...

$('#some_id').click(function() { 
    var arg1 = $(this); 
    var arg2 = 'whatever'; 

    return func1(arg1, arg2); 
}); 

Se l'unico parametro che ti serve è this, assegnare la funzione di riferimento ...

$('#some_id').click(func1); 
+0

Non so quale sia l'uso migliore per il ritorno lì ... Immagino che restituisca vero o falso? – Reigel

+0

Il ritorno di 'false' annulla l'evento click. Utile per quando è necessario eseguire la convalida (evitare un reindirizzamento). –

Problemi correlati