我有一个javascript函数,它使用window.open(...);
打开一个新的jsp窗口
我也有function passValues(value);
在我的子窗口中,我做了一些事情,最终我会将值传递给我的父javascript,如下所示:
window.opener.passValues(value);
当我尝试在函数中使用'this'
时,它引用window.opener
。
我不想发生这种情况......我希望我在调用passValues function
之前保持这一点。
感谢您的帮助
答案 0 :(得分:1)
这是因为在事件处理程序中“this”指的是被调用的函数。因此,必须在回调中创建一个引用:var self = this
。并使用“self”作为“this”
答案 1 :(得分:0)
使用Function.prototype.call
或Function.prototype.apply
调用该功能。
window.opener.passValues.call( this, value );
这将使用当前值.passValues
调用this
,将其固定为当前window
对象,只需调用
window.opener.passValues.call( window, value );
.call()
和.apply()
都提供了在调用函数中设置* this context变量`的值的选项。
答案 2 :(得分:0)
在您的子窗口中,使用call
或apply
调用父函数,并使用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);