Pass arguments to a callback function in jquery click event [duplicate]
Asked Answered
W

2

11

Straight to the business:

I have a jquery event listener that looks like this:

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

and a callback function:

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

I was wondering if I could pass an argument to a callback so it will look something like this

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

(I know that it immediately invokes that function, but still, is there a way to pass arguments to it)

Thank you in advance!

Wicopy answered 8/1, 2016 at 20:0 Comment(0)
S
18

The clean way to handle this is to return a function:

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

And then use:

$(".number").click(printNumber(number));
Scharff answered 8/1, 2016 at 20:3 Comment(0)
C
12

You can pass data to the callback directly as event.data in jQuery

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

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

Another way would be to use bind

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

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

But that would also change the callbacks this value

Chalky answered 8/1, 2016 at 20:5 Comment(4)
Returning the function is the cleaner way.Trahan
@RobertMoskal - passing event.data is the jQuery'ish way, it's why it's thereChalky
In printNumber code is not obvious that you have event.data.number, but it may be useful when $number.off('click', printNumber)Scharff
really thanx, bind worked for meBrubeck

© 2022 - 2024 — McMap. All rights reserved.