Reputation: 4767
Is it possible to pass a javascript function with arguments as an argument?
Example:
$(edit_link).click( changeViewMode( myvar ) );
Upvotes: 196
Views: 139568
Reputation: 411
Or if you are using es6 you should be able to use an arrow function
$(edit_link).click(() => changeViewMode(myvar));
Upvotes: 17
Reputation: 398
This is an example following Ferdinand Beyer's approach:
function function1()
{
function2(function () { function3("parameter value"); });
}
function function2(functionToBindOnClick)
{
$(".myButton").click(functionToBindOnClick);
}
function function3(message) { alert(message); }
In this example the "parameter value" is passed from function1 to function3 through function2 using a function wrap.
Upvotes: 2
Reputation: 724
You can do this
var message = 'Hello World';
var callback = function(){
alert(this)
}.bind(message);
and then
function activate(callback){
callback && callback();
}
activate(callback);
Or if your callback contains more flexible logic you can pass object.
Upvotes: 3
Reputation: 92461
Use Function.prototype.bind()
. Quoting MDN:
The
bind()
method creates a new function that, when called, has itsthis
keyword set to the provided value, with a given sequence of arguments preceding any provided when the new function is called.
It is supported by all major browsers, including IE9+.
Your code should look like this:
$(edit_link).click(changeViewMode.bind(null, myvar));
Side note: I assume you are in global context, i.e. this
variable is window
; otherwise use this
instead of null
.
Upvotes: 53
Reputation: 8145
No, but you can pass one without parameters, and do this:
$(edit_link).click(
function() { changeViewMode(myvar); }
);
So you're passing an anonymous function with no parameters, that function then calls your parameterized function with the variable in the closure
Upvotes: 19
Reputation: 171734
Yes, like this:
$(edit_link).click(function() { changeViewMode(myvar) });
Upvotes: 8
Reputation: 67137
Use a "closure":
$(edit_link).click(function(){ return changeViewMode(myvar); });
This creates an anonymous temporary function wrapper that knows about the parameter and passes it to the actual callback implementation.
Upvotes: 309