JavaScript:FormonSubmit在调用函数时不起作用';提交';

JavaScript:FormonSubmit在调用函数时不起作用';提交';,javascript,html,forms,Javascript,Html,Forms,我试图在单击表单的submit按钮时调用JavaScript函数 出于某种原因,当函数名为“submit”时不会调用该函数,但当函数名为其他名称时,它会工作 我还应该注意,当按钮从表单标签中取出时,该函数也可以工作 有人能解释一下为什么当它在表单中时,它不能与该名称一起使用吗 代码如下: <!DOCTYPE HTML> <html> <head> <script type="text/javascript">

我试图在单击表单的submit按钮时调用JavaScript函数

出于某种原因,当函数名为“submit”时不会调用该函数,但当函数名为其他名称时,它会工作

我还应该注意,当按钮从表单标签中取出时,该函数也可以工作

有人能解释一下为什么当它在表单中时,它不能与该名称一起使用吗

代码如下:

<!DOCTYPE HTML>
<html>
    <head>
        <script type="text/javascript"> 
            function submit(){
               console.log('test');
            }
        </script>
    </head>     
    <body>
        <form>
            <input type="text"/>
            <input type="submit" onclick="submit()"/>
        </form>
    </body>
</html>

函数提交(){
console.log('test');
}
因为
submit()
是在core JS中提交表单的保留函数

例如,如果表单的id类似于
myform
,则可以通过JS提交:

document.form['myform'].submit();
因此,调用该函数实际上是提交表单,而不是调用自定义函数


编辑:我忘了提到,它只在表单内部工作,因为它正在调用表单的提交功能。除此之外,它不再可用(因为body标记没有提交功能)。

表单元素被放置在表单中侦听器的作用域链上,就像通过以下方式:

with (form) {
  /* run listener code */
}
因此,标识符submit首先在处理程序的上下文中解析,然后在范围链的其余部分之前在表单上解析。这是表单所独有的,可以在以下内容中看到:

<form>
  <input name="foo">
  <input type="button" value="Do click" onclick="
    function submit(){console.log('click')};
    submit();
  ">
</form>

单击按钮在侦听器中运行submit函数,删除函数声明将运行表单的submit方法。这是表单所独有的

请注意,当直接调用表单的submit方法时,不会调用表单的submit处理程序


在表单之外,标识符submit以正常方式解析。

提交按钮也将根据表单标记的属性进行提交,因此最符合要求的方式是删除
onclick
并添加
onsubmit=“myFunction();return false”
@evan.stoddard-no它不会。调用表单的submit方法不会分派submit事件,因此不会调用submit侦听器。@RobG谢谢。我把问题看得太快了,没有抓住要点。我认为OP想要使用自定义方法来做一些类似ajax的事情。我道歉。