JavaScript将表单数据发布到没有“目标”的新窗口

时间:2010-02-12 15:30:35

标签: javascript forms post popup target

什么吗 我希望能够在不使用目标属性(XHTML验证)的情况下向新窗口发出一个发布请求(不一定是表单数据)。

为什么吗 我有一个webapp(使用jQuery),用户选择要打印的条目数。应将每个条目ID发送到处理页面,该页面将显示entires的可打印版本。我不想让用户远离webapp进行打印,我也不能在弹出窗口中使用get,因为入口ID的数量可能会变得太大而无法放入URL中。

我已经google了几个论坛,大多数人似乎直接建议目标属性或使用JavaScript插入它。我希望避免这两种解决方案。

这是否可能,如果是这样,怎么办?

提前致谢:)

6 个答案:

答案 0 :(得分:3)

这是target属性的用途。将其设置为“_blank”以打开一个新窗口。如果您希望您的标记有效(重点是什么?我向您保证,您的用户可能不太关心标记的有效性!),然后使用Javascript在页面加载时设置目标......

window.onload = function() {
  document.forms[0].target = '_blank';
}

没有别的办法。

答案 1 :(得分:1)

在Javascript中,拦截表单提交,填充第二个表单,其中只包含您想要的隐藏字段,然后提交该表单。

答案 2 :(得分:0)

要定位当前页面的顶部并突破当前正在使用的任何框架集,您将在HTML中使用<a href="page.htm" target="_top">。在Javascript中,您使用:

top.location.href = 'page.htm';

要定位当前页面或框架,您可以在HTML中使用<a href="page.htm" target="_self">。在Javascript中,您使用:

self.location.href = 'page.htm';

要定位父框架,您可以在HTML中使用<a href="page.htm" target="_parent">。在Javascript中,您使用:

parent.location.href = 'page.htm';

要定位框架集中的特定框架,您可以在HTML中使用<a href="page.htm" target="thatframe">。在Javascript中,您使用:

top.frames['thatframe'].location.href = 'page.htm';

要定位当前页面中的特定iframe,您可以在HTML中使用<a href="page.htm" target="thatframe">。在Javascript中,您使用:

self.frames['thatframe'].location.href = 'page.htm'; 

答案 3 :(得分:0)

target元素的属性<form>在XHTML 1.0 过渡中有效。

如果您使用的是XHTML 1.1或1.0 Strict,则<iframe>首先不是有效标记..

答案 4 :(得分:0)

您可以使用Javascript window.open来“弹出”新窗口并使用URL中的GET参数来传递参数......但IMO比在过渡文档类型中使用目标属性更糟糕。

最好的方法是在DOM中动态创建一个“虚假”的新窗口,并通过AJAX调用填充自己。这样您就不会“破坏”用户体验(通过打开一个新窗口)。

答案 5 :(得分:0)

如果在打开新窗口的页面中设置一些隐藏字段(称之为entryIds),则在打开调用页面的新窗口之前,可以在打开的页面中引用它,如下所示:

$(function() {
    var $opener = $(window.opener.document);
    var entryIds = $opener.find("#entryIds").val();
    // do something with the ids
});  

这里的缺点是你现在还可以通过javascript显示你的参赛资料。根本不需要做表格。

如果您感觉活泼,您可以在打开新窗口之前在开启者页面上设置会话或cookie中的条目ID(通过Web服务调用),并在打开的页面上抓取会话以便您可以而是在服务器端构建打印页面。