2011-10-23 49 views
9

我有一个自定义函数,我想向它添加一个回调函数,我查看了其他问题,但我无法真正找到我的问题的答案。所以基本上它看起来像这样:jquery在自定义函数中调用回调函数

​​

而且我有我想要触发的回调不同的功能,最终我想打电话给myfunction的是这样的:

myfunction(callback()); 

因此,谁能告诉我的方式来做到这一点?

回答

20

你会这样称呼它(通过回调函数作为参数)。这不会调用该函数,而只是传递一个引用,然后可以在您的自定义函数中稍后调用该引用。

你会定义函数,然后调用回调函数中这样说:

function myfunction(cb) { 
    cb(arg1, arg2); 
} 

注意,还有的实际上是从您的自定义函数中调用回调函数多种方法。如果你只需要正常调用它,并且不关心this的说法,你可以用:

cb(); 

如果你想设置的this参数的东西,你可以用这个:

cb.call(thisArg, arg1, arg2); 

如果你想沿着当前的参数传递或传递的参数数组并设置this说法,你这样做:

cb.apply(thisArg, argArray); 

有关.call().apply()的参考文献。


您当前的代码有这方面的JavaScript错误:

test(rand_gyumolcs, link, callback){ 
    callback(); 
}; 

这是不合法的JavaScript。我不知道你在做什么,但是这看起来像函数声明的一半,而函数调用的一半。如果你只是想调用的测试功能,你只需使用:

test(rand_gyumolcs, link, callback); 

内部测试,如果你想在回调函数被调用的动画完成后,那么你就必须挂钩完成然后调用回调函数。

+0

似乎不适合我jfriend00 ...这可能是我的错,但你可以看一下吗?代码有点乱,我知道,我不擅长jquery ... http://ridewithus.co.cc/test/ –

+0

如果你能看到..我想要右侧的水果移动,和测试功能做到这一点,但我也有一个回调功能,应该将它们移回原来的位置 –

+0

请在您的原始问题中发布相关代码,或者给出代码在您的页面中的位置以及如何触发它。你已经发布了一个包含五个嵌入脚本页面的网页,我不知道你在问什么代码。 – jfriend00

4

通知我没有调用回调函数,而是将它作为函数引用传递给我的函数。然后我在最后或者你想要的地方调用它。传递引用时,函数作为参数

myfunction(myCallbackFn); 

注意有没有括号函数名后:

+1

@Keith ......你需要传递,你需要在声明myfunction的运行实际的功能:即myfunction的(function(){alert“hello”;});不myfunction(回调); – bouk

7

这里是用一个返回值也是以输入参数的回调的例子:

function test2(arg1, arg2, callback) { 
    var result = callback(arg1, arg2); 

    alert('arg1=' + arg1 + ', arg2=' + arg2 + ', result=' + result); 
} 

test2(1, 2, function(a, b) { return a + b; });