【问题标题】:How send a form with Javascript when input name is "submit"?输入名称为“提交”时如何使用 Javascript 发送表单?
【发布时间】:2012-02-02 11:58:55
【问题描述】:

问题:如果一个表单输入的名称为 submit,您如何发送带有 Javascript 的表单?

背景:我正在将用户重定向到另一个带有隐藏 HTML 表单的页面。我无法更改(隐藏)输入的名称,因为另一个页面位于另一台服务器上,并且输入需要与它们完全相同。我的 HTML 表单如下所示:

<form id="redirectForm" method="post" action="http://www.example.com/">
  <input name="search" type="hidden" value="search for this" />
  <input name="submit" type="hidden" value="search now" />
</form>

我今天使用以下 javascript 行自动发送表单:

document.getElementById('redirectForm').submit();

但是,由于一个输入的名称是“提交”(它不能是其他名称,否则另一台服务器不会处理请求),document.getElementById('redirectForm').submit 指的是输入,因为它覆盖了表单函数submit() .

Firefox 中的错误消息是:Error: document.getElementById("requestform").submit is not a function。 Safari 中的类似错误消息。

【问题讨论】:

  • 你试过document.getElementById('redirectForm').submit.click()吗? :P
  • @Stefan 很抱歉,它没有提交表单。名称为submit 的输入没有submitbutton 的类型属性,而是hidden

标签: javascript html form-submit


【解决方案1】:

值得注意:将输入名称更改为“提交”以外的名称通常要容易得多。请仅在确实不可能的情况下使用以下解决方案。

您需要从不同的表单中获取submit 函数:

document.createElement('form').submit.call(document.getElementById('redirectForm'));

如果您已经有另一个&lt;form&gt; 标签,您可以使用它而不是创建另一个标签。

【讨论】:

  • 我认为创建一个元素只是为了获得它的功能是一种浪费。我不确定您是否出于跨浏览器的原因这样做,但是 var theForm = document.getElementById('redirectForm'); theForm.constructor.prototype.submit.call(theForm); 呢?
  • @pimvdb 它似乎也适用于 Firefox 9、Safari 5 和 Internet Explorer 9。
  • 更好:HTMLFormElement.prototype.submit.call(document.getElementById('redirectForm'))。毕竟HTMLFormElement 等价于theForm.constructor
  • @SLaks 我已经编辑了您的答案,因为它现在是重复的候选人。如果您不同意我的观点,请随时回滚。
【解决方案2】:

使用HTMLFormElement.prototype中的submit()方法:

HTMLFormElement.prototype.submit.call(document.getElementById('redirectForm'));

【讨论】:

  • 似乎对我有用(FF66,Chromium 72)。实际上似乎也比公认的答案更干净。
  • 可能会更干净(不需要硬编码要使用的原型)来执行var form = document.getElementById('redirectForm'); form.__proto__.submit.call(form) 之类的操作。适用于 FF66 和 Chromium 72,但可能无处不在。我想当有一个名为 __proto__ 的字段时,这仍然会中断,但这似乎可以接受。
猜你喜欢
  • 2016-04-04
  • 1970-01-01
  • 2013-02-24
  • 2019-06-05
  • 1970-01-01
  • 1970-01-01
  • 2015-02-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多