将变量传递给回调函数的正确方法

ily*_*lyo 4 javascript jquery callback anonymous-function

当我有

$('#div').click(function(someVar){//do something with soneVar});
Run Code Online (Sandbox Code Playgroud)

但是我希望有一个命名的回调函数,我someVar正确地通过了吗?

$('#div').click(someFunction(someVar));
function someFunction(someVar){}
Run Code Online (Sandbox Code Playgroud)

SLa*_*aks 9

你的两个例子都错了.

您的第一个示例为名为的回调方法创建一个参数someVar ; 它将成为eventjQuery传递给处理程序方法的对象.

第二个示例立即调用该方法,然后将其结果click作为事件处理程序传递给该方法.

您需要传递一个函数表达式,该函数表达式使用外部作用域中的参数调用您的函数(使用闭包):

$('#div').click(function() { someFunction(someVar); });
Run Code Online (Sandbox Code Playgroud)


Aln*_*tak 7

click回调函数将被传递一个jQuery事件对象,而不是someVar.

你必须回调函数中自己调用你的函数.

$('#div').click(function(ev) {
    someFunction(someVar);
}

function someFunction(someVar) {
     ...
}
Run Code Online (Sandbox Code Playgroud)

或者,做:

$('#div').click({someVar: someVar}, someFunction);

function someFunction(ev) {
    // your var is now in ev.data.someVar
}
Run Code Online (Sandbox Code Playgroud)