所以,我正在尝试打开第二个窗口,以便可以从它触发下载,而不是当前的表单。
在父窗口中,我打开一个子窗口:
var windowHandle = window.open("../Downloading.aspx", "_blank", "height=200, width=200,alwaysRaised=yes", false);
然后我将一个表单(downloadReportForm是带表单的jQuery对象)添加到downloads.aspx页面
$(windowHandle.document).ready(function () {
var $oldForm = $('form', this);
alert($oldForm.length); //1
$oldForm.after(downloadReportForm);
var $excelReport = $('form#excelReport', this);
alert($excelReport.length); //1
$excelReport.submit();
});
看起来它有效,但是,它仍然似乎触发了表单,好像它来自父窗口而不是子窗口。
我想要完成的是一个小的“请等待你的下载”窗口。表单必须在客户端生成,然后触发。如果它包含在一个页面中,它可以工作,但是当我尝试将表单放在新创建/打开的窗口中时,它不会在新窗口中运行。
知道如何才能完成这项专长吗?
编辑:看起来问题实际上是将表单附加到新窗口...它被附加到当前窗口,而不是新窗口。
EDIT2:不知道为什么我不能将此表格附加到身体......
$(windowHandle.document).ready(function () {
var $body = $(windowHandle.document.body);
//FAILING to append...getting an exception
$body.append(downloadReportForm);
var $excelReport = $('form#excelReport', $body);
$excelReport.submit();
});
jQuery变量$ body的长度为1.但是追加行无法说“没有这样的界面”。
答案 0 :(得分:0)
从孩子那里,在函数调用之前使用opener.
。
示例:opener.alert("moo")
答案 1 :(得分:0)
原来问题是我没有正确创建downloadReportForm
我只是使用$('<input ... />');
创建元素,如果我想将它们添加到另一个文档,则需要使用$('<input ... />', windowHandle.document);