303

谁能告诉我这段代码出了什么问题?我尝试使用 JavaScript 提交表单,但显示错误“.submit 不是函数”。有关代码的更多详细信息,请参见下文:

<form action="product.php" method="get" name="frmProduct" id="frmProduct" enctype="multipart/form-data">

<input onclick="submitAction()" id="submit_value" type="button" name="submit_value" value="">

</form>

<script type="text/javascript">
    function submitAction()
    {
        document.frmProduct.submit();
    }
</script>

我也试过这个:

<script type="text/javascript">
    function submitAction()
    {
        document.forms["frmProduct"].submit();
    }
</script>

两者都向我显示相同的错误:(

4

17 回答 17

836

提交不是函数

意味着您命名了您的提交按钮或其他一些元素submit。将按钮重命名为btnSubmit,您的通话将神奇地工作。

当您命名按钮提交时,您将覆盖submit()表单上的功能。

于 2009-05-07T11:46:35.713 回答
14
<form action="product.php" method="post" name="frmProduct" id="frmProduct" enctype="multipart/form-data">

<input id="submit_value" type="button" name="submit_value" value="">

</form>

<script type="text/javascript">

document.getElementById("submit_value").onclick = submitAction;

function submitAction()
{
    document.getElementById("frmProduct").submit();
    return false;
}
</script>

编辑:我不小心交换了 id

于 2009-05-07T05:44:43.993 回答
14

如果您没有机会更改name="submit",您也可以通过以下方式提交表单:

function submitForm(form) {
    const submitFormFunction = Object.getPrototypeOf(form).submit;
    submitFormFunction.call(form);
}
于 2017-01-25T08:18:14.407 回答
13

确保没有其他同名的表单,并确保表单中没有name="submit"or id="submit"

于 2014-05-31T09:00:26.517 回答
5

当我使用母版页创建 MVC 应用程序时,我遇到了同样的问题。如上所述,尝试查找名称为“提交”的元素,但事实并非如此。

就我而言,它在我的页面上创建了多个标签,因此在引用正确的表单时存在一些问题。

要解决此问题,我将让按钮处理要使用的表单对象:

onclick="return SubmitForm(this.form)"

并与js:

function SubmitForm(frm) {
    frm.submit();
}
于 2012-06-18T07:40:54.710 回答
3

这个话题已经有很多答案了,但对我来说效果最好的(也是最简单的——一行!)是对 Neil E. Pearson 从 2013 年 4 月 21 日发表的评论的修改:

如果你的提交按钮被#submit 卡住了,你可以通过窃取另一个表单实例的 submit() 方法来绕过它。

我对他的方法的修改,以及对我有用的方法:

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

于 2017-05-25T17:54:35.370 回答
3

很抱歉回答晚了,但对于那些仍然面临同样错误的人。要摆脱这个错误:

<form method="POST">
  <input type="text"/>
  <input type="submit" id="submit-form" value="Submit Form" style="display: none;"/>
</form>

<!-- Other element that will submit the form -->
<button onclick="submitTheForm()">Submit the form</button>

<script>
function submitTheForm(){
  document.getElementById("submit-form").click();
}
</script>

解释:

javascript 函数submitTheForm()正在访问提交input元素并在其上调用单击事件,从而导致form提交。

这个解决方案是终身的,几乎 100% 兼容所有浏览器。

于 2021-04-08T04:16:30.610 回答
2

为表单元素命名 submit 将简单地隐藏提交属性。确保您没有名为 submit 的表单元素,并且您应该能够正常访问提交功能。

于 2016-09-25T17:28:08.047 回答
2

其实解决方法很简单...

原来的:

    <form action="product.php" method="get" name="frmProduct" id="frmProduct"
enctype="multipart/form-data">
    <input onclick="submitAction()" id="submit_value" type="button" 
    name="submit_value" value="">
</form>
<script type="text/javascript">
    function submitAction()
    {
        document.frmProduct.submit();
    }
</script>

解决方案:

    <form action="product.php" method="get" name="frmProduct" id="frmProduct" 
enctype="multipart/form-data">
</form>

<!-- Place the button here -->
<input onclick="submitAction()" id="submit_value" type="button" 
    name="submit_value" value="">

<script type="text/javascript">
    function submitAction()
    {
        document.frmProduct.submit();
    }
</script>
于 2019-01-24T01:46:48.843 回答
2

我有同样的问题并解决了我的问题,只需从提交按钮中删除 name="submit" 即可。

<button name='submit' value='Submit Payment' ></button>

改成

<button value='Submit Payment' ></button>

删除名称属性希望它会工作

于 2020-11-15T07:13:11.603 回答
1

您应该使用以下代码:

$(document).on("ready", function () {
       
        document.frmProduct.submit();
    });

于 2018-12-06T13:06:38.233 回答
0

我用的是

var enviar = document.getElementById("enviar");
enviar.type = "submit"; 

只是因为其他一切都不起作用。

于 2016-07-16T08:54:16.057 回答
0

我的解决方案是设置按钮的“表单”属性

<form id="form_id_name"><button name="btnSubmit" form="form_id_name" /></form>

或者是js:

YOURFORMOBJ.getElementsByTagName("button")[0].setAttribute("form", "form_id_name");
YOURFORMOBJ.submit();
于 2017-03-10T13:19:17.710 回答
0

可能的解决方案 -
1.确保您没有任何其他带有名称/id 的元素作为提交。
2.尝试调用函数为onClick = "return submitAction();"
3。document.getElementById("form-name").submit();

于 2017-12-21T07:12:09.690 回答
0

form.submit()如果表单没有<button type="submit">submit</button>. form元素属于HTMLFormElement接口,因此,我们可以直接从原型调用,该方法将始终适用于任何表单元素。

HTMLFormElement.prototype.submit.call(form)
于 2022-01-18T06:05:17.900 回答
-1

你可以试试

<form action="product.php" method="get" name="frmProduct" id="frmProduct" enctype="multipart/form-data">

<input onclick="submitAction(this)" id="submit_value" type="button" name="submit_value" value="">

</form>

<script type="text/javascript">
function submitAction(element)
{
    element.form.submit();
}
</script>

您没有多个同名的表格吗?

于 2009-05-07T06:37:23.447 回答
-1

使用 getElementById:

document.getElementById ('frmProduct').submit ()
于 2009-05-07T09:18:51.327 回答