对象#<HTMLFormElement> 的属性“提交”不是函数

Posted

技术标签:

【中文标题】对象#<HTMLFormElement> 的属性“提交”不是函数【英文标题】:Property 'submit' of object #<HTMLFormElement> is not a function 【发布时间】:2012-09-14 11:47:48 【问题描述】:

谁能解释一下这个错误是什么意思?我将不胜感激任何形式的帮助。

<form class="form" id="form" action="/mailer.php" method="post">

我使用的 Jquery 代码是这个。

$('#form').submit();  

【问题讨论】:

尝试使用$('#form')[0].submit(); 或简单地使用document.getElementById('form').submit(); ..顺便说一句,您当前的代码应该可以正常工作.. 你的页面好像有冲突,prototype/mootools/...? 我马上试试第一个选项。第二次回复... jquery.min.js 你要关闭你的表单&lt;/form&gt;吗? @techfoobar 他是通过ID 选择的。无论如何它只会得到第一个匹配的元素 【参考方案1】:

查看表单,查看是否有htmlInputElement id 或名称为submit

这会将属性submit设置为HTMLFormElement,因此表单元素原型中的submit函数无法执行。

示例:

<form class="form" id="form" action="/mailer.php" method="post">
    ​<input type="button" name="submit" value="go"/>
</form>​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​

js:

​console.log($("#form")[0].submit)​;​  // will be the button element, not the submit function.

jQuery的.submit()方法会在原dom元素上调用.submit(),所以会报错。

【讨论】:

有一个“模拟”提交输入 type="button" name="submit" 所以..我会删除名称,看看是否有效。 @AndrewAllenWest 是的,一定是这个原因。 这不是错误。这就是底层 DOM 的工作方式。有一种变通方法,但它不适用于 jQuery 1.9 及更低版本正式支持的 Internet Explorer 版本。 刚刚找到解决同样问题的方法非常困难,非常感谢! 很好的抓地力,应该可以避免人们用头撞桌子。【参考方案2】:

xdazz很好地解释了这个问题。

您可以使用 HTMLFormElement 的原生 submit 方法来解决问题:

HTMLFormElement.prototype.submit.call($('#form')[0]);

【讨论】:

非常感谢!这对我有用!具有讽刺意味的是,这个答案没有赞成票。 感谢您的解决方法!如果他们有这个问题,在控制台中执行表单非常好...... IT cmets 表单就是这种情况...... 如果xdazz的解决方案不够用,这是一个不错的选择!【参考方案3】:

如果您有一个名为 submit 或 id submit 的按钮或输入,我在 IE 中看到了错误。确保您的输入正确命名。这是一篇关于它的文章http://bugs.jquery.com/ticket/1414

【讨论】:

以上是关于对象#<HTMLFormElement> 的属性“提交”不是函数的主要内容,如果未能解决你的问题,请参考以下文章

18 表单

函数未在 HTMLFormElement.onsubmit 中定义 [重复]

--表单

学习第九天(2019-11-22)

无法解决 ts 错误:对象可能是“未定义”.ts(2532)

第14章表单脚本