从子窗口调用父javascript中的函数

时间:2012-10-25 09:29:43

标签: javascript jsp window

我有一个javascript函数,它使用window.open(...);打开一个新的jsp窗口 我也有function passValues(value);

在我的子窗口中,我做了一些事情,最终我会将值传递给我的父javascript,如下所示:

window.opener.passValues(value);

当我尝试在函数中使用'this'时,它引用window.opener

我不想发生这种情况......我希望我在调用passValues function之前保持这一点。

感谢您的帮助

3 个答案:

答案 0 :(得分:1)

这是因为在事件处理程序中“this”指的是被调用的函数。因此,必须在回调中创建一个引用:var self = this。并使用“self”作为“this”

答案 1 :(得分:0)

使用Function.prototype.callFunction.prototype.apply调用该功能。

window.opener.passValues.call( this, value );

这将使用当前值.passValues调用this,将其固定为当前window对象,只需调用

window.opener.passValues.call( window, value );

.call().apply()都提供了在调用函数中设置* this context变量`的值的选项。


参考:.call().apply()

答案 2 :(得分:0)

在您的子窗口中,使用callapply调用父函数,并使用this

传递子窗口的范围
window.opener.passValues.call(this, value);

或者如果要传递多个参数,请使用apply

window.opener.passValues.apply(this, [value1, value2]);

但是,如果在子范围(this)的上下文中调用父函数,则可以使用this.value访问子窗口的全局变量,因此传递值可能已过时。

请注意this的值取决于函数调用本身的上下文...例如,如果从链接的onclick处理程序中调用它(BTW不这样做), this引用该链接的上下文,而不是该子window。当您从实例化对象(new)中调用它时,this引用类的范围而不是子window。如果有疑问,请将this替换为您希望调用该函数的范围。

 window.opener.passValues.call(window, value);