“提交不是一个函数”;JavaScript错误

有人能告诉我这段代码出了什么问题吗?我试图用JavaScript提交一个表单,但是一个错误”。提交不是一个函数”。查看下面的代码的更多细节:

<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>

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

249917 次浏览
<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

你可以试试

<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>

你不是有不止一份同名的表格吗?

使用getElementById:

document.getElementById ('frmProduct').submit ()

Submit不是一个函数

意味着你将提交按钮或其他元素命名为submit。将按钮重命名为btnSubmit,您的调用将神奇地工作。

当你将按钮命名为submit时,你就重写了表单上的submit()函数。

当我创建一个使用母版页的MVC应用程序时,我也有同样的问题。 尝试寻找元素与“提交”作为名称如上所述,但它不是这样的。< / p >

对于我的情况,它在我的页面上创建了多个标签,因此引用正确的表单存在一些问题。

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

onclick="return SubmitForm(this.form)"

用js:

function SubmitForm(frm) {
frm.submit();
}

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

我用的是

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

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

给表单元素一个名称submit将简单地遮蔽submit属性。 确保表单元素中没有名称为submit的元素,这样就可以很好地访问submit函数。< / p >

如果你没有机会更改name="submit",你也可以这样提交表单:

function submitForm(form) {
const submitFormFunction = Object.getPrototypeOf(form).submit;
submitFormFunction.call(form);
}

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

<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();

这个话题已经有很多答案了,但对我来说,最好的一个(也是最简单的——一行!)是对尼尔·e·皮尔森在2013年4月21日发表的评论的修改:

如果你的提交按钮是#submit,你可以通过窃取另一个表单实例的submit()方法来解决这个问题。

我对他的方法进行了修改,哪些对我有效:

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

可能解-
1.确保没有任何其他带有name/id的元素作为submit.
2.尝试调用onClick = "return submitAction();"
的函数 3.document.getElementById("form-name").submit(); < / p >

你应该使用下面的代码:
$(document).on("ready", function () {
       

document.frmProduct.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>

解决方案:

    <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>

我有同样的问题,解决了我的问题,只是删除名称="提交"从提交按钮。

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

改变

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

删除名称属性,希望它能工作

抱歉回答晚了,但对于那些仍然面临同样错误的人。消除此错误:

<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元素,并调用其上的click事件,从而导致提交form

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

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

HTMLFormElement.prototype.submit.call(form)

我也面临这个问题,但我做了一个快速修复使用

const form = document.getElementById('create_user_form');


function onSubmit(event) {
console.log(event.target[0].value);


console.log(form.submit); // 👉️ input#submit


// ✅ Works
HTMLFormElement.prototype.submit.call(form);
}


form.addEventListener('submit', onSubmit);

即使访问表单元素上的submit属性指向提交输入元素而不是方法,我们仍然可以通过访问HTMLFormElement接口上的submit属性来提交表单。