Javascript 为什么HTML表单不能通过名为“的按钮提交”;提交;?

Javascript 为什么HTML表单不能通过名为“的按钮提交”;提交;?,javascript,html,forms,Javascript,Html,Forms,我正在尝试提交一个HTML表单 <form action="go.php"> <input id="I" type="button" name="submit" value="Go" onclick="this.form.submit()"/> </form> 上面的代码失败了,但如果我将button的名称更改为其他名称,例如 <form action="go.php"> <input id="I" type="butt

我正在尝试提交一个HTML表单

<form action="go.php">
    <input id="I" type="button" name="submit" value="Go" onclick="this.form.submit()"/>
</form>

上面的代码失败了,但如果我将button的名称更改为其他名称,例如

<form action="go.php">
    <input id="I" type="button" name="bt" value="Go" onclick="this.form.submit()"/>
</form>


它起作用了。为什么?这两者之间有什么区别?

表单中具有“name”属性的交互元素在DOM图中与表单DOM节点关联,作为节点的属性。属性名取自交互元素上的“name”属性

因此,如果您通过开发人员控制台查看表单节点,您将看到与输入元素、按钮、文本区域、选择等对应的属性。因此,给定:

<form id=myform>
  <input name=sometext value="hello world">
</form>

当您使用与表单DOM节点上的其他有用属性(如“提交”)冲突的名称时,这种奇怪的行为会导致问题。通过名称“submit”对按钮的引用已覆盖对表单节点“born”时存在的“submit”函数的引用。

当您要提交时,为什么要使用type=“button”。使用type=“submit”在浏览器控制台窗口中,您可能会看到如下消息:
uncaughttypeerror:this.form.submit不是一个函数
。这暗示了这个问题,下面@Pointy的答案最好地解释了这个问题。
var f = document.getElementById("myform");
alert(f.sometext.value); // "hello world"