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!

0

2 Answers 2

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));
Sign up to request clarification or add additional context in comments.

Comments

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

4 Comments

Returning the function is the cleaner way.
@RobertMoskal - passing event.data is the jQuery'ish way, it's why it's there
In printNumber code is not obvious that you have event.data.number, but it may be useful when $number.off('click', printNumber)
really thanx, bind worked for me

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.