2016-01-08 9 views
6

Gerade zum Geschäft:Pass Argumente an eine Callback-Funktion in Jquery Click-Ereignis

ich ein jquery Event-Listener haben, die wie folgt aussieht:

$(".number").click(printNumber); 

und eine Callback-Funktion:

function printNumber(number){ 
    console.log(number); 
} 

Ich frage mich, ob ich ein Argument an einen Rückruf übergeben könnte, so dass es in etwa so aussehen wird

$(".number").click(printNumber(number)); 

(Ich weiß, dass es sofort diese Funktion aufruft, aber immer noch, ist es eine Möglichkeit, Argumente zu übergeben)

Vielen Dank im Voraus!

Antwort

9

Der saubere Weg zu handhaben ist, eine Funktion zurück:

function printNumber(number) { 
    return function(e) { 
     console.log(number); 
    }; 
} 

Und dann verwenden:

$(".number").click(printNumber(number)); 
7

Sie Daten an die Callback

$(".number").on('click', {number : 4}, printNumber); 

function printNumber(event){ 
    console.log(event.data.number); // 4 
} 
passieren können direkt als event.data in jQuery

Eine andere Möglichkeit wäre, bind

zu verwenden
$(".number").click(printNumber.bind($, 4)); 

function printNumber(number, event){ 
    console.log(number); // 4 
} 

Aber das würde auch die Rückrufe ändern this Wert

+1

die Funktion Rückkehr ist der Reiniger Art und Weise. –

+0

@RobertMoskal - passing 'event.data' ist der jQuery'ish Weg, deshalb ist es da – adeneo

+0

In printNumber Code ist nicht offensichtlich, dass Sie event.data.number haben, aber es kann nützlich sein, wenn $ number.off ('click ', printNumber) –

Verwandte Themen