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>

因为submit()是核心JS中提交表单的保留函数。

例如,如果你的表单有一个像myform这样的id,你可以这样做,通过JS提交它:

document.form['myform'].submit();

调用那个函数实际上是提交表单而不是调用自定义函数

EDIT:我忘了说,它只在表单内工作,因为它调用了表单的提交函数。在它之外,它不再可用(因为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以正常方式解析

最新更新