我有一个页面,当用户点击图标时,会启动第二个窗口来更新某些数据库条目。当子窗口打开时,我想附加一个事件来触发回调函数并更新父屏幕上的字段。目前,javascript类似于:
var child = window.open(URL);
child.name = reference; // used to store parameters about which field to update
$(child).on('unload', function() {
var w = this.name.split(':');
fieldUpdate(w[1],w[0]);
});
// also tried ...
// child.onbeforeunload = function...
// child.onunload = function...
// child.onclose = function...
问题在于,在其他地方使用且无法更改的子页面使用<input type="submit"...>
来启动回发并更新数据库。然后控制器方法重新加载视图,这显然会清除所有事件。因此,回调仅在第一次更新时被调用。
在我的测试中,onbeforeunload
在控制器回发之前被调用,onunload
被调用之后,onclose
在使用{{1}时根本没有被调用}}。在所有情况下,submit
属性都会保留在重新加载的页面中,但所有事件都会被清除。
父窗口是否可以设置事件(或恢复它),以便在child.name
操作发生时触发回调?我已经尝试过设置超时回调,但似乎在获取/保留子窗口参数方面存在问题。
更新
有关信息,我希望调用的方法类似于(实际代码有更多的错误检查等):
submit
这是对朱利安关于使用AJAX的评论的回答。正如您所看到的,我已经这样做了,但是如何通过单击我遇到问题的子页面中的“提交”按钮来触发调用。
如果我可以修改子页面,这将是相当容易的,但不幸的是,这不是一个选项,因为它会破坏太多的其他代码。