从父窗口触发子项上的javascript,并在子上下文中运行

时间:2011-09-06 20:22:11

标签: jquery forms

所以,我正在尝试打开第二个窗口,以便可以从它触发下载,而不是当前的表单。

在父窗口中,我打开一个子窗口:

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.但是追加行无法说“没有这样的界面”。

2 个答案:

答案 0 :(得分:0)

从孩子那里,在函数调用之前使用opener.

示例:opener.alert("moo")

答案 1 :(得分:0)

原来问题是我没有正确创建downloadReportForm

我只是使用$('<input ... />');创建元素,如果我想将它们添加到另一个文档,则需要使用$('<input ... />', windowHandle.document);

在该文档上下文中创建它们
相关问题