【问题标题】:Have one submit button in a form (out of multiple buttons) open a new tab在表单中有一个提交按钮(在多个按钮中)打开一个新选项卡
【发布时间】:2015-10-23 08:46:24
【问题描述】:

我有一个带有提交按钮的表单和一个在提交前预览 PDF 的按钮。我希望预览 PDF 按钮将表单数据传递到新页面(这显然会生成 PDF),但提交按钮可以在当前页面上工作。

我一直在环顾四周,但大多数答案都指向在表单标签中使用target="_blank",尽管这在我的情况下不起作用,因为这会打开选项卡中的每个按钮。其他一些展示了如何在 javascript 中打开一个窗口,但没有任何表单数据,除非它是通过 URL 传递的。

我只真正了解 PHP 和 HTML,所以我可以通过提交到同一页面、替换框中的文本并在此过程中打开一个新窗口来实现,但这有点过于复杂了为了一个新标签,另外我需要将所有内容设置为会话变量或通过 URL 传递内容。

【问题讨论】:

  • 您是要下载的PDF还是只显示在浏览器中?让它下载会更容易。
  • 我只需要它显示在浏览器中,它是让管理员在发送电子邮件之前检查它,之后管理员不需要再次查看它。顺便说一句,我已经设置了一个页面来生成它,我只需要在一个新标签中使用它:)
  • 一种方法是,使用 ajax 将所有表单数据存储在临时数据库中,返回带有 ajax 结果的唯一 ID,将用户重定向到 $ 中具有该唯一 ID 的不同页面_GET,显示PDF数据,最后删除。有点复杂,但可以满足您的目的。
  • 不,我需要表单数据来生成 pdf :)

标签: php html forms


【解决方案1】:

像这样?

window.onload = function() {
  document.getElementById("preview").onclick = function() {
    document.getElementById("previewIFrame").src = "showpdf.php?id=" + document.getElementById("pdfID").value;
    document.getElementById("previewDiv").style.display = "block";
  }
  document.getElementById("close").onclick = function() {
    document.getElementById("previewDiv").style.display = "none";
  }
}
#previewDiv {
  display: none;
}
<form>
  <input type="hidden" value="<?php echo $pdfId; ?>" id="pdfID" />
  <input type="button" value="preview" id="preview" />
</form>
<div id="previewDiv"><span id="close">Close</span>
  <br>
  <iframe src="" id="previewIFrame"></iframe>
</div>

或者只是

<form action="send.php">
  <input name="pdfID" type="hidden" value="<?php echo $pdfId; ?>"/>
  <input type="submit">
</form>
<form action="preview.php" target="iframe1">
  <input name="pdfID" type="hidden" value="<?php echo $pdfId; ?>"/>
  <input type="submit">
</form>
<iframe name="iframe1"</iframe>

【讨论】:

  • 谢谢,只是想将其集成以查看它的实际效果,这会将所有值发布到新选项卡,还是仍需要通过 URL 传递值?
  • 第一个会 GET,第二个现在会 GET,但是如果你在表单中添加 method="POST" 则 POST
  • 第一个似乎不起作用(在 jsfiddle 以及网站上尝试过,但没有任何反应),尽管第二个在 iframe 中加载页面是一个不错的主意。但是,将所有值发布到新选项卡并没有真正做到简单的事情,除非每个表单都可以以某种方式从另一种表单中读取,否则使用两种表单不会真正起作用(如果可以的话,生活会变得如此轻松)
  • 恐怕我不明白你真正想要什么。您对 _blank 为什么不做您想做的事情以及您是否必须发布或必须获取(通过 URL 传递)有点含糊。请使用有关限制的更多信息更新您的问题。我的第二个示例中的关闭按钮也可以是发送表单的提交按钮。第一个示例中什么不起作用?控制台中的错误?
  • 两个错误 - 在我修复它之前,您使用了带有拼写错误 (pnclick) 的脚本,并且您在 fiddle 中选择了 onload 而不是 head。这会起作用:jsfiddle.net/mplungjan/dj4m2dzk - 另见我的 sn-p
【解决方案2】:

由于似乎没有任何明显简单的方法可以完成如此​​简单的事情,因此我对问题进行了多次改写并最终找到了一些东西。原来有一个超级简单的方法我完全错过了。

在尝试了 mplugjan 的回答之后,我意识到唯一简单的方法是为每个按钮设置两个单独的表单(除非我做了 akshay 的建议,但这是最后的手段),但我不知何故需要从主要形式,据我所知,这是不可能的单独形式。然后我想我实际上只需要按钮来执行不同的操作,幸运的是确实得出了结果。可以通过formactionformtarget完成。

如果其他人遇到此问题,如何执行此操作的简要示例:

<form action = "page.php">
    <input type="submit" value="Accept"/>
    <input type="submit" value="Preview PDF" formaction="pdf.php" formtarget="_blank"/>
</form>

【讨论】:

  • 哇。从未听说过这些属性...现在我看到了您的答案和解决方案,在“过去”中需要一个脚本来执行onclick="this.form.action='....'; this.form.target='_blank'"
  • 另外,也可以使用脚本从第一个表单中读取来自其他表单的数据
  • 在查找如何从另一个表单读取时,我遇到了这些属性哈哈,看起来确实有点可疑,似乎没有任何方法可以做这么简单的事情:)跨度>
猜你喜欢
  • 1970-01-01
  • 2019-09-20
  • 1970-01-01
  • 1970-01-01
  • 2014-01-31
  • 2015-10-04
  • 2015-03-10
  • 2011-03-20
  • 2017-10-04
相关资源
最近更新 更多