如果输入名称是"提交",如何使用Javascript发送表单?

And*_*ist 19 html javascript form-submit

问题:如果一个表单输入有名称,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>
Run Code Online (Sandbox Code Playgroud)

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

document.getElementById('redirectForm').submit();
Run Code Online (Sandbox Code Playgroud)

但是,由于一个输入的名称是"submit"(它不能是其他内容,或者其他服务器不会处理请求),document.getElementById('redirectForm').submit因此它会引用输入,因为它会覆盖表单函数submit().

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

SLa*_*aks 17

值得注意的是:将输入名称更改为"提交"以外的其他内容通常要容易得多.只有在真的不可能的情况下才能使用下面的解决方案.

您需要submit从另一种形式获取该功能:

document.createElement('form').submit.call(document.getElementById('redirectForm'));
Run Code Online (Sandbox Code Playgroud)

如果您已有另一个<form>标记,则可以使用它而不是创建另一个标记.

  • 更好的是:`HTMLFormElement.prototype.submit.call(document.getElementById('redirectForm'))`.毕竟,`HTMLFormElement`相当于`theForm.constructor`. (13认同)
  • 我认为创建一个元素只是为了获得它的功能是一种浪费.我不确定你是否因为跨浏览器的原因而这样做,但是仅仅`var theForm = document.getElementById('redirectForm'); theForm.constructor.prototype.submit.call(theForm);`? (6认同)
  • @SLaks我已经编辑了你的答案,因为它现在是一个重复的候选人.如果您不同意我的意见,请随意回滚. (2认同)

Mic*_*ski 7

使用submit()方法来自HTMLFormElement.prototype:

HTMLFormElement.prototype.submit.call(document.getElementById('redirectForm'));
Run Code Online (Sandbox Code Playgroud)