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

时间:2017-01-31 18:37:05

标签: javascript jquery

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

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

在这个实例中,回调函数是另一个接受参数的函数的闭包,参数是使用子页面上的元素从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 param可以“强制”评估,因为我写了吗?

  2. 是否有更好的方式?

1 个答案:

答案 0 :(得分:1)

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

main-page: 
function open-child(createCallback) {
    callback = createCallback();
}

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