我有一个包含jQuery的页面,以及一个单独的非jQuery函数。
目前我的函数运行在$(document).ready上,但我想在函数完成后立即调用jQuery函数。我可以将我的函数作为回调函数传递给任何jQuery函数,但是如何设置反过来呢?
所以我最好知道如何创建一个函数foo来处理这个问题:
$(document).ready(function() {
foo(myfunction(), $(bar).something);
}
或如何扩展现有函数来处理回调。感谢。
答案 0 :(得分:6)
定义您的函数以接受(可选)回调,如果回调存在,则使用javascript call()或apply()方法。要保留上下文,请将this
(或您想要的任何上下文)的当前值传递给apply方法。 Call()和apply()根据参数的传递方式而不同。
function myfunction(callback) {
// do stuff
if (callback)
callback.apply(this);
}
答案 1 :(得分:2)
您所要做的就是创建自定义方法以接受另一个变量......在本例中为函数引用。
如果你有这样的事情:
var add = function(a, b){
return a+b;
};
要添加回调,您需要将其更改为:
var add = function(a, b, callback){
callback();
return a+b;
};
(非常糟糕的例子,但它得到了重点)
答案 2 :(得分:2)
功能包装怎么样:
Function.prototype.appendCallback = function(callback){
var fn = this;
return function(){
fn.apply( this, arguments ); // execute original function
callback.call(this); // then the callback
};
};
示例:
var newConfirm = window.confirm.appendCallback(function () {
alert('after from callback');
});
newConfirm('hello?'); // shows a confirmation, and then executes the callback.