如何在函数表达式的参数列表中计算jquery表达式



我有一个主页面,它通过ajax加载子页面,然后当子页面关闭时,会运行一个全局范围的回调函数来执行任何必要的操作,例如以某种方式刷新主页面内容。

我遇到了一种情况,子页面本身需要定义回调函数,因为它是唯一知道关闭时需要做什么的地方。

在这种情况下,回调函数是另一个接受参数的函数的闭包,并且这些参数是使用子页面上的元素从jquery表达式派生的。

问题是,当回调函数运行时,子页面已经卸载,因此当计算所附函数的参数列表时,jquery无法定位目标元素。

我可以通过使用全局范围的临时变量来保存参数来解决这个问题,但我宁愿在页面仍在内存中时"强制"对jquery表达式进行求值。

设置不起作用的伪代码示例:

main-page:
callback = null;
newcallback = some_function;
function open-child(newcallback) {
callback = newcallback;
//load child page
};
function close-child(){
//unload child page
callback();
}
child-page:
child-page-element
callback = function () {
some_action( $("#child-page-element").data("id") );
};
close-child();

通过添加一个全局变量,我可以做到这一点:

child-page:
child-page-element
global_var = $("#child-page-element").data("id");
callback = function () {
some_action(global_var);
};
close-child();

问题:

  1. 是否可以"强制"jquery参数在编写时进行求值?

  2. 有更好的方法吗?

好吧,你可以在子页面上创建一个函数来创建回调(并收集其数据),比如:

main-page: 
function open-child(createCallback) {
callback = createCallback();
}
child-page:
createCallback = function() {
var id = $("#child-page-element").data("id");
return function () {
some_action(id);
};
};

最新更新